Hallo ik ben met een lastige query bezig en kom er niet meer uit.

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:

<?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 )
?>

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
Hallo,

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).
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.
Probeer hem zo eens:

<?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))
?>
-----------------------------------------------------------
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?
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..
------------------------------------------------------------
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 :-)
Nee bij mij sla je juist geen gegevens dubbel op. De tabel "een" staan nummers aan andere nummers gekoppeld. Deze gegevens zijn vaste gegevens en zijn dus eenmalig ingevoerd.

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.
Met deze tabel kun je een bedrijf aan maximaal 6 andere bedrijven koppelen, maar wat als je een bedrijf aan 20 andere bedrijven wilt koppelen (of aan 263 bedrijven)? Ga dan velden toevoegen?

Tabel 1 naam: een

een_id getal1 getal2 getal3 .... getal262 getal263

??

Reageren