| 

.NET C# Java Javascript Exception

1
Hi,

ich hab ein simples Many-to-Many Tabellenkonstrukt. Games können mit mehreren Tags versehen werden und Tags natürlich mit mehreren Games.

Tabelle Games
ID   |   NAME
1 | World of Tanks
2 | AION


Tabelle Game_Tags
ID   |   GAME_ID   | TAG_ID
1 | 1 | 2
2 | 1 | 3
3 | 2 | 1

Tabell Tags
ID   | KEYWORD
1 | mmorpg
2 | favorit
3 | tank


Ich möchte nun nach Games suchen die zB. zwei der Tags haben. In diesem Beispiel anhand den Tag Keywords "favorit" und "tank". Leider musste ich feststellen dass mir meine IT-Skills bei dieser SQL Abfrage schlichtweg nicht reichen.

Bis jetzt habe ich folgendes hingekriegt, wobei diese Form von SQL-Statement leider nichts zurückliefert.
SELECT g.name FROM games AS g 
LEFT JOIN game_tags AS gt ON g.id = gt.game_id
LEFT JOIN tags AS t ON gt.tag_id = t.id AND t.keyword = "tank" AND t.keyword = "favorit";


Was mache ich falsch oder muss ich ändern damit ich meine Suche nach Games anhand mehr als nur einem Tag ausführen kann?

Danke für die Hilfe,
rjgamer
11.11.2014
rjgamer 31 3
2 Antworten
1
Lösung durch weitere Recherche selber gefunden.

SELECT g.name FROM games AS g 
LEFT JOIN game_tags AS gt ON g.id = gt.game_id
LEFT JOIN tags AS t ON gt.tag_id = t.id
WHERE t.keyword IN ("tank", "favorit")
GROUP BY g.id
HAVING COUNT(t.keyword) = 2
11.11.2014
rjgamer 31 3
Die Lösung wollte ich auch gerade posten :-)
multi1209 11.11.2014
Kleine Anmerkung von mir noch: bei Strings würde ich auf Vergleiche mit = verzichten und lieber like verwenden!
muffi 11.11.2014
0
Versuche es mal mit:

SELECT g.name FROM games AS g
LEFT JOIN game_tags AS gt ON g.id = gt.game_id
LEFT JOIN tags AS t ON gt.tag_id = t.id
WHERE t.keyword = "tank" OR t.keyword = "favorit";

Gruß
Klaus
11.11.2014
luedi 2,0k 1 9
Hi,

wir bestimmt klappen. Dann erhalte ich aber auch Games, die nur auf eine der beiden Tags referenzieren.

Ich möchte aber nur die Games, welche beide Tags referenziert haben. Also "AND" anstatt "OR", aber dann klappt das Statement nicht mehr.
rjgamer 11.11.2014

Stelle deine --Frage jetzt!