Query probleem
De tabellen zien er ongeveer zo uit:
Tabel 1 naam: een
een_id getal1 getal2 getal3 getal4 getal5 getal6
-------------------------------------------------------
44 21 22 23 47 84 98
45 22 45 47 42
46 11 41 21 45
47 22
48 84 45 21
Tabel 2 naam: twee
twee_id Naam Bedrijf tel een_id
---------------------------------------------------
1 Henks Mooi 0124 21
2 frits groot 7178 48
3 Roel Klein 7431 47
4 Gekkie stom 7442 22
Okee uitleg:
Ik wil graag wanneer je een bedrijf zoekt moet 'een_id' : 48 dat je dan ook de bedrijven vindt met de id's die horen bij een_id 48.
In dit geval wanneer ik zou zoeken op 48 zou ik de bedrijven 'frits' & 'Henks'moeten vinden.
De query die ik nu gebruik (werkt wel maar verkeerde uitslag) is dit:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
SELECT * FROM een, twee WHERE (een.een_id = 48 AND twee.twee_id = 48 OR twee.een_id =
een.getal1 OR twee.een_id = een.getal2 OR twee.een_id = een.getal3 OR
twee.een_id = een.getal4 OR twee.een_id = een.getal5 OR twee.een_id = een.getal6 )
?>
SELECT * FROM een, twee WHERE (een.een_id = 48 AND twee.twee_id = 48 OR twee.een_id =
een.getal1 OR twee.een_id = een.getal2 OR twee.een_id = een.getal3 OR
twee.een_id = een.getal4 OR twee.een_id = een.getal5 OR twee.een_id = een.getal6 )
?>
Met deze query krijg ik heel veel bedrijven, ook zitten hier veel dubbelen bij. Het word een zoek query om bedrijven te vinden. Nu heeft elk bedrijf een 'een_id'
Maar ik wil hebben dat het bedrijf ook op een aantal andere een_id's word gevonden.
Daarom heb ik een extra tabel gemaakt waar ik bepaalde een_id's aan elkaar koppel. Ik moet in de
query er nu voor zorgen dat wanneer op 48 word gezocht ook de bedrijven vindt die 84, 45 of 21 als een_id hebben.
Ik heb overal al lopen zoeken maar zit echt vast nu. Ik had dit al eerder gepost, toen is er niks uitgekomen omdat men dacht dat de database niet goed was genormaliseerd. De database kan niet anders en is correct genormaliseerd. Ik wou graag weten hoe ik een dergelijke query kan maken.
Mvg,
Roel
Tabel "een" lijk mij niet een goede tabel om bedrijven aan elkaar te koppelen.
Je moet een koppel tabel maken.
In dit geval koppelt de tabel dan met zich zelf.
Koppel tabel "een"
bedrijf_id bedrijf2_id
22 48
22 55
22 56
22 60
23 45
24 55
24 77
.... ....
Dus bedrijf 22 is gekoppeld aan bedrijf 48 (en anders om).
Gewijzigd op 05/01/2006 09:58:00 door foton
Om dubbele records te voorkomen kun je GROUP BY in je query gebruiken.
Op die manier word de database groot & traag omdat wel duizend bedrijven hetzelfde "een_id" kunnen hebben.
Tabel 1 naam: een
een_id getal1 getal2 getal3 getal4 getal5 getal6
-----------------------------------------------------------
getal1, getal2, getal3, getal4.....etc, in deze velden staan toch getallen die naar een bedrijf verwijzen?
Jan Koehoorn: Ik krijg deze error met je query:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /usr/home/------/domains/-------/public_html/bedrijftest.php on line 23
Dus de query lijkt niet goed te zijn..
Gewijzigd op 05/01/2006 10:16:00 door roel
Ik had dit al eerder gepost, toen is er niks uitgekomen omdat men dacht dat de database niet goed was genormaliseerd.
------------------------------------------------------------
Nou, volgens mij is 'ie ook niet genormaliseerd.
------------------------------------------------------------
De database kan niet anders en is correct genormaliseerd.
------------------------------------------------------------
Naar mijn mening dus niet.
Wat als nou een bedrijf aan 7 of meer bedrijven wilt koppelen? Ga je dan steeds een nieuw veld toevoegen? Niet echt netjes lijkt mij.
Ook zul je veel lege velden krijgen, wanneer je een bedrijf maar aan een paar andere koppelt.
Voor lege velden wordt ook ruimte gereserveerd.
Op die manier word de database groot & traag omdat wel duizend bedrijven hetzelfde "een_id" kunnen hebben.
-----------------------------------------------------
-----------------------------------------------------
getal1 getal2 getal3 getal4 getal5 getal6 zijn vaste gegevens. Deze zijn niet gekoppeld aan 1 bedrijf. Meerdere bedrijven kunnen het zelfde gegeven hebben.
-----------------------------------------------------
Hmmmm...... bij mij sla je dus de gevens dubbel op? Idd, maar met jouw methode doe je hetzelfde.... maar dan in het kwadraat :-)
In tabel "twee" staan bedrijven (is dus variabel), hieraan koppel je een een_id. Maar als ik een bedrijf en ik zoek op id 48 wil ik ook de bedrijven kunnen vinden die in tabel "een" hieraan zijn gekoppeld.
Tabel 1 naam: een
een_id getal1 getal2 getal3 .... getal262 getal263
??
Ik weet dat het ingewikkeld klinkt (en omslachtig), maar als ik de hele database hier neer zou leggen werd het een grote post :P
Daarom zou ik graag een hebben dat mijn vraag werd beandwoord (de query :P) en niet of de database nu wel of niet goed in elkaar zit..
roel:
getal1 getal2 getal3 getal4 getal5 getal6 zijn vaste gegevens. Deze zijn niet gekoppeld aan 1 bedrijf. Meerdere bedrijven kunnen het zelfde gegeven hebben.
Jan Koehoorn: Ik krijg deze error met je query:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /usr/home/------/domains/-------/public_html/bedrijftest.php on line 23
Dus de query lijkt niet goed te zijn..
Jan Koehoorn: Ik krijg deze error met je query:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /usr/home/------/domains/-------/public_html/bedrijftest.php on line 23
Dus de query lijkt niet goed te zijn..
Echo de query eens naar je scherm? Wat krijg je dan te zien?
Als ik zeg dat ik een bedrijf aan een bedrijf koppel, dan bedoel duidelijk niet de naam van het bedrijf, maar het id van de bedrijf (het nummer dus).
-----------------------------------------------------
Op die manier word de database groot & traag omdat wel duizend bedrijven hetzelfde "een_id" kunnen hebben.
-----------------------------------------------------
Dus niet.... bij mijn manier heb je maar 2 velden.
Wat dus veel sneller te doorzoeken is.
Ook zijn de queries in dit geval makkelijker te schrijven.
-----------------------------------------------------
Jah.. De echte tabel is ook een stuk groter (tot getal 33)!
-----------------------------------------------------
Je geeft nu zelf al aan dat de tabel van jou zelf ook al een stuk groter is.
Je zult nu ook veel lege velden krijgen wanneer je bijvoorbeeld een bedrijf maar aan 1 bedrijf koppelt, voor lege velden wordt enigzins ook ruimte voor gereserveerd.
Neem van mij aan dat die database van jou niet goed is genormaliseerd.
Tevens zal het langzamer gaan werken wanneer er veel gegevens in komen te staan.
Je hebt nu al problemen met het schrijven van queries, omdat de manier waarop je nu werkt nogal omslachtig is.
Elke keer dat je een record aanmaakt reserveer je ruimte voor 33 velden. Het is zonde dat je al die ruimte in jou geval niet zal gaan gebruiken.
Mijn methode is gewoon simpeler, sneller en makkelijker uit te breiden. Het maakt niet uit of je een bedrijf dan aan 1 of aan 1000 andere bedrijven koppelt.... je hebt in dat geval geen lege velden. Tevens is het schrijven van een query voor mijn tabel een stuk makkelijker.
Maar ja, van mij mag je lekker doorwerken zoals je nu werkt.
Ik ben niet de eerste die heeft gezegd dat die database van jou niet goed genormaliseerd is.
Ik mag hopen dat je er later zelf ook achterkomt.
(je merkt het nu al bij het schrijven van queries, later bij de database performance).
Ok.... succes er mee
ps: gebruik een GROUP BY in je query als dubbele gegevens wilt vermijden.
Gewijzigd op 05/01/2006 11:08:00 door foton
Klaasjan:
IK doen het meestal zo
THX dude deze werkt perfect!
Maar helaas niet op de manier die ik had gehoopt :-(
Even uit mijn hoofd, dus ik weet niet zeker of het werkt.
mooi :-)