webForumDet fria alternativet

Hjälp med sökfråga i SQL

5 svar · 247 visningar · startad av nkrantz

nkrantzMedlem sedan apr. 2002830 inlägg
#1

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
#2

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
#3

Ingen som vet eller är jag bara otydlig att förklara?

// Nippe

nkrantzMedlem sedan apr. 2002830 inlägg
#4

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
#5

borde inte något sånt här fungera bättre?

mom.option_id IN(6,1,14)
nkrantzMedlem sedan apr. 2002830 inlägg
#6

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

131 ms totalt · 3 externa anrop · v20260731065814-full.cf67ef55
128 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)