MySQL - Att söka efter taggar
Hej!
Jag försöker få ihop en liten sida för mig själv där jag ska kunna lägga in saker som jag sedan kan gruppera och tagga.
Jag har tre tabeller:
objekt
grupper
taggar
objekt innehåller alla mina objekt
grupper låter mig gruppera mina objekt
taggar låter mig tagga mina objekt
Låt oss fylla tabellerna med innehåll:
objekt:
[id] [namn]
0 fotboll
1 tärning
2 basketboll
3 låda
4 kuvert
5 vindruva
grupper:
[id] [id_grupp] [id_objekt]
0 0 0
1 0 2
2 0 3
3 0 4
4 1 0
5 1 1
6 1 3
7 1 4
8 1 5
(grupp noll innehåller alltså fotboll, basketboll, låda och kuvert, grupp ett innehåller fotboll, tärning, basketboll, kuvert och vindruva)
taggar:
[id] [id_objekt] [id_tagg]
0 0 rund
1 0 sport
3 0 vit
4 1 fyrkantig
5 1 vit
6 2 rund
7 2 sport
8 3 fyrkantig
9 4 fyrkantig
10 5 rund
vi har alltså taggat
fotboll: rund, sport, vit
tärning: fyrkantig, vit
basketboll: rund, sport
låda: fyrkantig
kuvert: fyrkantig
vindruva: rund
Nu vill jag alltså kunna sortera och söka bland all den här datan
Om vi börjar med att printa ut allt i grupp noll:
SELECT objekt.namn FROM objekt JOIN grupper ON(objekt.id=grupper.id_objekt) WHERE grupper.id_grupp = '0';
> fotboll
> basketboll
> låda
> kuvert
snyggt! Nu vill jag kunna söka bland den här gruppen också, låt mig söka efter "sport":
SELECT objekt.namn FROM objekt JOIN grupper ON(objekt.id=grupper.id_objekt) JOIN taggar ON(objekt.id=taggar.id_objekt) WHERE (grupper.id_grupp = '0') AND (tags.tag LIKE '%sport%');
> fotboll
> basketboll
Perfekt! Men det är nu jag stöter på problem,
för jag vet inte hur jag ska göra för att kunna söka på flera taggar samtidigt.
Jag vill t.ex. kunna söka på "fyrkantig & vit" i grupp 1 för att kunna plocka fram enbart tärningen, utan att få med fotbollen (vit) eller låda och kuvert (fyrkantig)
Är det någon som har en idé? Jag är inte speciellt grym på hur join fungerar och känner mig ganska ringrostig på MySQL i övrigt, det här är vad jag har fått ihop under natten
Andra lösningar jag tänkt på är att göra två eller flera sökningar i MySQL och sedan jämföra resultaten med php, för att bara plocka ut de fält som är gemensamma för sökningarna -- men att lösa det med sql känns ju som den bästa lösningen
Tacksam för hjälp!