1Danke
ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
403
403
EMPFEHLEN
-
Hallo zusammen,
erst einmal ein "Hallo" in die Runde, ist mein erster Eintrag hier, allerdings hat mir diese Seite schon ein paar mal geholfen.
Jetzt habe ich ein Problem (oder sehe den Wald vor lauter Bäumen nicht):
Ich erstelle gerade eine Bilderdatenbank, Grundgedanke ist, dass der Nutzer später anhand von Tags die Daten filtern kann. Jedoch habe ich genau mit der Filterung ein Problem. Ich vermute fast, dass mein Datenmodell nicht optimal für diese Anwendung ist. Aber ich schreib erst mal kurz, wie mein bisheriger Ansatz ist.
Ich habe mir insgesamt 3 Tabellen erstellt:
Code :1 2 3 4 5 6 7 8
Tabelle "Bilder" BildID |Bildpfad |Bildbeschreibung ---------+--------------------+-------------------- 1 | ./images/pic1.jpg | blabla 2 | ./images/pic2.jpg | suelz 3 | ./images/pic3.jpg | laber 4 | ./images/pic4.jpg | nix
Code :1 2 3 4 5 6 7 8
Tabelle "BilderTags" TagID |Tagname ---------+-------------------- 1 | Anbau 2 | Kompressor 3 | Stahlblech 4 | Edelstahl
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Tabelle "XBilderTags" XBTID |xBildID | xTagID ------+--------+------- 1 | 1 | 1 2 | 1 | 2 3 | 1 | 3 4 | 2 | 1 5 | 2 | 2 6 | 2 | 3 7 | 3 | 1 8 | 3 | 2 9 | 3 | 3 10 | 4 | 1 11 | 4 | 2 12 | 4 | 4
Daraus ergeben sich folgende Bilder<=> Tag Kombinationen:
Code :1 2 3 4
pic1.jpg = Anbau, Kompressor, Stahlblech pic2.jpg = Anbau, Kompressor, Stahlblech pic3.jpg = Anbau, Kompressor, Stahlblech pic4.jpg = Anbau, Kompressor, Edelstahl
Meine Idee war, jetzt einfach eine Abfrage über die XBilderTags Tabelle laufen zu lassen um bspw. alle Anbaugeräte mit Kompressor aus Stahlblech laufen zu lassen. Das ist jedoch eine UND-Verknüpfung, da ja alle 3 Bedingungen erfüllt sein müssen. Mit einer ODER-Verknüpfung bekomme ich dann ja alle 4 Bilder als Ergebnis.
Habe ich zu stark normalisiert oder bin ich zu blind um eine Lösung mittels SELECT zu generieren?
-
Ist gneau richtig normalisiert
Du kannst die Auswahl ganz normal machen. Dann Gruppieren auf das Bild und Zählen ob die Anzahl Treffer auch stimmt.
Als Beispiel mit den Suchbegriffen Anbau, Kompressor, Edelstahl -> Ergo 3 Begriffe
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
SELECT b.id, b.bildpfad, b.bildbeschreibung, GROUP_CONCAT(t.tagname SEPARATOR ', ') AS tags FROM bilder AS b INNER JOIN xbildertags AS x ON b.bildid = x.xbildid INNER JOIN bildertags AS t ON x.xtagid = t.tagid WHERE --Kann auch über ein normales OR gelöst werden FIND_IN_SET(t.tagname, 'Anbau,Kompressor,Edelstahl' GROUP BY b.id HAVING COUNT(DISITNCT tagid) = 3
Das ganze ist natürlich ungetestet....---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hallo yaslaw,
funktioniert einwandfrei. Das einzige was er angemeckert hat war das Find_in_set, habe das durch OR Argumente ersetzt, hat dann funktioniert. Tadellos! Darf ich Dich MySQL-Gott nennen
Gruß
Tribal
Ähnliche Themen
-
MySQL SELECT Verknüpfung von strings
Von tecla im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 04.08.08, 10:03 -
Ausgabe einer MySQL Verknüpfung mit mehreren Spalten
Von buzzi22 im Forum PHPAntworten: 1Letzter Beitrag: 03.07.06, 11:54 -
[MySQL] Verknüpfung DB & Textverarbeitung
Von Snodri im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 27.08.05, 17:42 -
Verknüpfung von Tabellen zwischen Oracle und MySQL
Von beppino im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 31.08.04, 11:29 -
mySQL: Mit zweifacher Verknüpfung mit einer Tabelle
Von diwa im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 15.08.04, 00:01





Zitieren

Login





