Toon posts:

[MySQL Query] effe moeilijk doen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi,

Ik heb een probleempje qua structuur:

Ik heb de volgende tables:

user_1
user_2
user_3

etc.

en een table users waar de gegevens in zitten + uid

nu wil ik een query doen in alle tables en de eerste 25 resultaten krijgen (kan niet met limit om dat het over meerdere tables gaat)

ik moet kijken of er in een table van een user iets sta, zoja dan wil ik het hebben.

Ik kan het volgende doen en dan kijken of ik een hit heb (COUNT), maar dit is een vieze manier omdat ik alle users langs moet gaan en dan de eerste 25 users moet pakken die aan de voor waarde vol doet

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
        SELECT

          COUNT(user_1.*) as '1',
          COUNT(user_2.*) as '2',
          COUNT(user_3.*) as '3'

        FROM

          user_1,
          user_2,
          user_3

        WHERE

          user_1.did = ' . $did .'
        AND
          user_2.did = ' . $did .'
        AND
          user_3.did = ' . $did .'

        AND

          user_1.tsBegin > ' . $dateTs .'
        AND
          user_2.tsBegin > ' . $dateTs .'
        AND
          user_3.tsBegin > ' . $dateTs .'

        AND

          user_1.tsBegin < ' . ((int)$dateTs + 86400) . '
        AND
          user_2.tsBegin < ' . ((int)$dateTs + 86400) . '
        AND
          user_3.tsBegin < ' . ((int)$dateTs + 86400) . '
        ;



Is er een betere manier?

(ps. ik ben niet goed in uitleggen dus als je er niks van snap zeg dat dan effe)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

1e vraag: Waarom heb je uberhaupt drie usertabellen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 08:08
Redesign je tables als je voor elke user een nieuwe tabel moet maken is er meestal iets niet zo goed.

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 03-02 15:29
En waarom zou een limit niet over meerdere tabellen werken?

Ook Knor is aangestoken met het ligfietsvirus!


Verwijderd

Topicstarter
Eskimootje schreef op 11 March 2003 @ 11:46:
Redesign je tables als je voor elke user een nieuwe tabel moet maken is er meestal iets niet zo goed.
mn database is zn 500 mb (alles bij elkaar) daar zitten ongeveer 1000 user tables in. Daar om gebruik ik deze stuctuur.

(de 3 user tables zijn maar een voorbeeld, er zijn er 1000 en dat vond ik wat te veel schrijven)

ik kan geen limit gebruiken om dat ik tables wil tellen

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
[nohtml]
Verwijderd schreef op 11 maart 2003 @ 11:48:
[...]


mn database is zn 500 mb (alles bij elkaar) daar zitten ongeveer 1000 user tables in. Daar om gebruik ik deze stuctuur.
500 mb hoeft niet groot te zijn voor een database.
Per user een aparte tabel is gewoon een uber-oer-erg-slecht design.

https://fgheysels.github.io/


  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 03-02 15:29
Kan je eens je database structuur met users ed hier laten zien, zoals eskimootje zei is het nogal onlogisch per user een tabel te hebben...

Ook Knor is aangestoken met het ligfietsvirus!


Verwijderd

Topicstarter
whoami schreef op 11 maart 2003 @ 11:50:
[nohtml]
[...]

500 mb hoeft niet groot te zijn voor een database.
Per user een aparte tabel is gewoon een uber-oer-erg-slecht design.
mn data base blijft groeien en in denk dat ie blijft hangen op zn 2 a 3 GB

ik had nergens problemen mee, alleen dit stukje (voor de rest hoef ik geen querys te doen over de users)

Verwijderd

Topicstarter
Rotjeknor schreef op 11 maart 2003 @ 11:51:
Kan je eens je database structuur met users ed hier laten zien, zoals eskimootje zei is het nogal onlogisch per user een tabel te hebben...
ik maak een bordermanager (novell) logfile analyzer

Mn tables:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#
# Table structure for table `domains`
#

CREATE TABLE domains (
  did int(10) unsigned NOT NULL auto_increment,
  domainName varchar(255) NOT NULL default '',
  PRIMARY KEY  (did),
  KEY did (did),
  KEY domainName (domainName)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `domainsize`
#

CREATE TABLE domainsize (
  did int(10) unsigned NOT NULL default '0',
  date date NOT NULL default '0000-00-00',
  size int(12) unsigned NOT NULL default '0',
  KEY did (did),
  KEY date (date)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `users`
#

CREATE TABLE users (
  uid int(10) unsigned NOT NULL auto_increment,
  ndsName varchar(255) NOT NULL default '',
  PRIMARY KEY  (uid),
  KEY uid (uid),
  KEY ndsName (ndsName)
) TYPE=MyISAM;



en ik heb ook twee dynamische tables:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#
# Table structure for table `domaindirectories_template`
#

CREATE TABLE domainPaths_template (
  dpid int(10) unsigned NOT NULL auto_increment,
  path varchar(255) NOT NULL default '',
  lastUsed int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (ddid),
  KEY dpid (dpid),
  KEY path (path)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `user_template`
#

CREATE TABLE user_template (
  did int(10) unsigned NOT NULL default '0',
  tsBegin int(10) unsigned NOT NULL default '0',
  tsEnd int(10) unsigned NOT NULL default '0',
  size int(12) unsigned NOT NULL default '0',
  data text NOT NULL,
  KEY did (did),
  KEY tsEnd (tsEnd)
) TYPE=MyISAM;

Verwijderd

Topicstarter
maar kan iemand mij helpen?

  • niels_999348
  • Registratie: Maart 2003
  • Laatst online: 07:22
waarom maak je geen nieuw user systeem?
Met bv. de tables:
users:
ID
username
userinfo:
met alle info over de users

Dan kan je met een JOIN alle gegevens ophalen is makkelijk en bespaart ruimte

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Tja, als jij voet bij stuk wilt houden wbt je design,....

Trouwens, kicken doe je pas na 24h, niet na 9 minuten. :/

Ik denk dat jij allereerst eens een tutorial of boek over datamodellering moet doornemen.

[ Voor 29% gewijzigd door whoami op 11-03-2003 12:07 ]

https://fgheysels.github.io/


  • niels_999348
  • Registratie: Maart 2003
  • Laatst online: 07:22
zoek anders met google er zijn duizenden sites over database design!

  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 23-08 12:02
ik ben geen MySql kenner, maar access kent de operator UNION ... om meerdere selects aan elkaar te knopen.

dus :


SELECT
[..]
FROM

UNION select
[..]
FROM

Ik hoop dat je er iets mee kan :) |:(

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 31-01 20:37
Verwijderd schreef op 11 March 2003 @ 11:44:
Hi,

Ik heb een probleempje qua structuur:
Dat kun je wel zeggen ja :)

Zet eerst je structuur om in een goede, integer database. Dit gaat nergens over.

Gebruik eens 2 aparte tabellen en een koppel tabel als je per user gegevens wil opslaan.

En leer even verder over db-design, want dit gaat nergens over (NOFI, maar dit kan echt niet)

Verwijderd

Topicstarter
whoami schreef op 11 maart 2003 @ 12:06:
Tja, als jij voet bij stuk wilt houden wbt je design,....

Trouwens, kicken doe je pas na 24h, niet na 9 minuten. :/

Ik denk dat jij allereerst eens een tutorial of boek over datamodellering moet doornemen.
sorry, ben een beetje ongeduldig....


ik ga het zo oplossen:

ik maak een aparte link table aan:

uid - did - date

deze table hou ik bij als ik de log files in lees

met deze table kan ik nog steets snel de resultaten krijgen die ik wil

(ps. ik weet hoe ik een database moet maken qua stuctuur maar ik loop hiet tegen de hoeveelheid data aan (300.000 regels per dag komen er bij))

Verwijderd

Topicstarter
Sn3akz schreef op 11 March 2003 @ 12:15:
[...]


Dat kun je wel zeggen ja :)

Zet eerst je structuur om in een goede, integer database. Dit gaat nergens over.

Gebruik eens 2 aparte tabellen en een koppel tabel als je per user gegevens wil opslaan.

En leer even verder over db-design, want dit gaat nergens over (NOFI, maar dit kan echt niet)
ik vraag hier niet om mn stuctuur onder uit te schoppen

Als je het beter kan laat maar zien (ps. hou wel rekening met alles wat er in en uit die db moet)

Verwijderd

Topicstarter
Bud_s schreef op 11 March 2003 @ 12:14:
ik ben geen MySql kenner, maar access kent de operator UNION ... om meerdere selects aan elkaar te knopen.

dus :


SELECT
[..]
FROM

UNION select
[..]
FROM

Ik hoop dat je er iets mee kan :) |:(
tnx, maar in dit geval heb ik er niet aan

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 11 March 2003 @ 12:15:
(ps. ik weet hoe ik een database moet maken qua stuctuur maar ik loop hiet tegen de hoeveelheid data aan (300.000 regels per dag komen er bij))

Wat heeft de groei met het kunnen maken van een goed gestructureerde database? :)

Als jij een goed gestructureerde database ontwerpt zal dat vaak behoorlijk goed schalen, per user een aparte tabel is iig niet echt handig, hoewel het niet per definitie fout hoeft te zijn in sommige gevallen.
Goede indices leggen zal echter veel belangrijker zijn en natuurlijk geen under-powered databasemachine gebruiken en dan de software de schuld geven ;)

Owja, joins met honderden tables is mysql totaaal niet geschikt voor en ook de grote paketten kun je daarmee op de knietjes dwingen...

[ Voor 9% gewijzigd door ACM op 11-03-2003 12:40 ]


  • MAZZA
  • Registratie: Januari 2000
  • Laatst online: 17-08 14:00

MAZZA

Barbie is er weer!

Verwijderd schreef op 11 March 2003 @ 12:17:
[...]

ik vraag hier niet om mn stuctuur onder uit te schoppen
:? :)

Die mensen die hier reageren proberen je te helpen he :) Als zij denken dat jouw database structuur niet echt efficient lijkt te zijn dan is dat alleen maar positieve kritiek. +1 behulpzaam enzo ;) Beetje lief zijn voor de mensen die je proberen te helpen! :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Btw, het zou goed kunnen dat als je in je model deze twee tabellen aanpast en dus niet duizenden losse tabellen aanmaakt maar eentje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE domainPaths (
  dpid int(10) unsigned NOT NULL auto_increment,
  <b>did int(10)</b>,
  path varchar(255) NOT NULL default '',
  lastUsed int(10) unsigned NOT NULL default '0',
);
# --------------------------------------------------------

#
# Table structure for table `user_template`
#

CREATE TABLE user_domains (
  did int(10) unsigned NOT NULL default '0',
  <b>uid int(10),</b>
  tsBegin int(10) unsigned NOT NULL default '0',
  tsEnd int(10) unsigned NOT NULL default '0',
  size int(12) unsigned NOT NULL default '0',
  data text NOT NULL
);

Je al klaar bent, uiteraard niet letterlijk overnemen wat ik hier neerzet ;)

[ Voor 4% gewijzigd door ACM op 11-03-2003 14:23 ]


Verwijderd

Topicstarter
ACM schreef op 11 March 2003 @ 14:22:
Btw, het zou goed kunnen dat als je in je model deze twee tabellen aanpast en dus niet duizenden losse tabellen aanmaakt maar eentje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE domainPaths (
  dpid int(10) unsigned NOT NULL auto_increment,
  <b>did int(10)</b>,
  path varchar(255) NOT NULL default '',
  lastUsed int(10) unsigned NOT NULL default '0',
);
# --------------------------------------------------------

#
# Table structure for table `user_template`
#

CREATE TABLE user_domains (
  did int(10) unsigned NOT NULL default '0',
  <b>uid int(10),</b>
  tsBegin int(10) unsigned NOT NULL default '0',
  tsEnd int(10) unsigned NOT NULL default '0',
  size int(12) unsigned NOT NULL default '0',
  data text NOT NULL
);

Je al klaar bent, uiteraard niet letterlijk overnemen wat ik hier neerzet ;)
ik had al een extra teble gemaakt die heel veel lijkt op de table user_domains van jouw

bedankt
Pagina: 1