Minulla on taulut
työntekijä
-id
-nimi
-osoite
-paikkakunta
työhuone
-id
-osoite
-paikkakunta
työntekijän_työhuone
-työntekija_id
-työhuone_id
Työntekijä voi liittyä siis useampaan työhuoneeseen.
Nyt pitäisi tehdä kysely, jossa verrattaisiin hakusanaa työntekijän ja työhuoneen tietoihin. Kyselyn pitäisi palauttaa kaikki työntekijät, jonka omista tiedoista, tai jonkun häneen liitetyn työhuoneen tiedoista löytyy tuo hakusana.
Onnistuuko yhdellä kyselyllä? :)
Eikös olisi helpompaa, jos olisi vain kaksi taulua:
Työntekijä
- id
- nimi
- osoite
- paikkakunta
- työhuoneet (vaikka serialisoitu array tai id:t eroteluna esim. pilkulla)
Työhuone
- id
- osoite
- paikkakunta
- työntekijät (ks. Työnetkijä.työhuoneet)
Silloin haku onnistuu paljon yksinkertaisemmin.
SELECT * FROM työntekijä LEFT JOIN työntekijän_työhuone ON työntekijä.id=työntekijän_työhuone.työntekijä_id LEFT JOIN työhuone ON työntekijän_työhuone.työhuone_id=työhuone.id WHERE MATCH (työntekijä.nimi, työntekijä.osoite, työntekijä.paikkakunta, työhuone.osoite, työhuone.paikkakunta, ) AGAINST ('hakusana' IN BOOLEAN MODE)
sain sen itseasiassa (ehkä) toimiaan tähän tyyliin.
Täytyy vielä testailla.
Työhuoneen työntekijäitä voi olla useampia tai yksi tai ei yhtään ja kaikki työntekijät voivat muokata työhuoneen jäseniä, joten tuntui helpommalta tuon "ylimääräisen" taulun käyttö :)
Hengilö kirjoitti:
Eikös olisi helpompaa, jos olisi vain kaksi taulua:
Silloin haku onnistuu paljon yksinkertaisemmin.
Ei kun se menee silloin just vaikeammaksi.
Monta-moneen yhteyksissä "aputaulu" on relaatiotietokannoissa normaali ja toimivin käytäntö.
Aihe on jo aika vanha, joten et voi enää vastata siihen.