nkrantzMedlem sedan apr. 2002830 inlägg Hej!
Jag har skall göra en sökning i en databas där ett dynamiskt antal kriterier kan sökas på. Programerar i PHP, men den biten skall inte vara några problem.
Databasstrukturen är följande:
tbl_member
member_id | member_name
tbl_occupation
occupation_id | occupation_name
tbl_member_occupation
member_occupation_id | member_id | occupation_id
tbl_multiple_option
option_id
tbl_member_occupation_multiple
member_occupation_id |_option_id
Sökningen går till så att occupation_id väljs. Jag vill sedan att man skall kunna välja olika option_id, vilka är kopplade till tbl_member_occupation_multiple som i sin tur är kopplat till tbl_member_occupation (eller det kanske är tvärt om...)
För att förklara strukturen lite. Varje member_id är kopplat till ett eller flera yrken. Varje yrkesroll som en medlem har kan ha en eller flera option_id's. Vad jag vill få reda på är member_id i slutändan.
Är det tillräckligt med information för er smarta boys och girls för att lösa min fråga?
// Nippe
nkrantzMedlem sedan apr. 2002830 inlägg Hej igen!
Har kommit en bit på vägen med följande fråga:
SELECT
m.member_id,
m.name
FROM
tbl_member as m,
tbl_member_occupation AS mo,
tbl_member_occ_multi AS mom
WHERE
mo.occupation_id = 2
AND
mo.member_occupation_id = mom.member_occ_multi_id
AND
mo.member_id = m.member_id
AND
(
mom.option_id = 8
OR
mom.option_id = 14
OR
mom.option_id = 1
)
GROUP BY
member_id
Nu ligger problemet i att oavsett vad jag söker på som option_id så kommer medlemmarna upp som har occupation_id = 2. Skulle vilja ha en AND när det gäller option_id, men det funkar ju inte eftersom varje rad enbart kan ha ett alternativ.
Tips?
// Nippe
nkrantzMedlem sedan apr. 2002830 inlägg Ingen som vet eller är jag bara otydlig att förklara?
// Nippe
nkrantzMedlem sedan apr. 2002830 inlägg Löste det
lösningen var att joina tbl_member_occ_multi med sig själv antalet gånger som jag har sökkriterier... Här är hur det skulle kunna se ut:
SELECT
m.member_id,
m.name
FROM
tbl_member as m,
tbl_member_occupation AS mo,
tbl_member_occ_multi AS mom0,
tbl_member_occ_multi AS mom1,
tbl_member_occ_multi AS mom2
WHERE
mo.occupation_id = 2
AND
mo.member_occupation_id = mom0.member_occ_multi_id
AND
mo.member_id = m.member_id
AND
(mom0.option_id = 6 )
AND
(mom1.option_id = 1 )
AND
(mom2.option_id = 14 )
GROUP BY
member_id
// Nippe
elvelindMedlem sedan juli 2002167 inlägg borde inte något sånt här fungera bättre?
mom.option_id IN(6,1,14)
nkrantzMedlem sedan apr. 2002830 inlägg elvelind: Du har helt rätt, det funkade bra med den koden du föreslog, problemet är att den ger samma fel som min föreslagna kod. Nu returnerar den de records som har någon av dessa siffror i option_id. Jag vill att alla skall matcha!
Kollade lite i manualen, hittade inget av IN ALL eller dyl.
Förslag?
/ Nippe