Hilfe bei Abfrage MySQL
ch08
- datenbank
Hallo Community,
ich habe ein Problem bei einer MySQL abfrage, eventuell kann mir jemand weiterhelfen ich habe sämtliche Kombinationen probiert bekomme aber nicht das gewünschte Ergebnis.
Ich habe folgende Tabellen in der Datenbank:
Tabelle "articles":
articleID (INT-11, PRIMARY, auto_inc),
articleContent (LONGTEXT),
articleAuthor (INT-11)
Tabelle "users":
userID (INT-11, PRIMARY, auto_inc),
userAlias (VARCHAR-255),
Tabelle "elements":
In dieser Tabelle werden Gruppen, Menüs und Kategorien gespeichert.
Um was es sich handelt ist in der Spalte "elementType" festgelegt.
elementID (INT-11, PRIMARY, auto_inc),
elementType (ENUM),
elementName (VARCHAR255)
Tabelle "relation":
Diese Tabelle soll die Elemente aus der Tabelle "elements" verbinden.
Zum Beispiel kann eine User aus der Tabelle "users" mit einer Gruppe aus der Tabelle "elements" verbunden werden. Was mit dem Element verknüpft wird ist in der Spalte "relationType" festgelegt.
relationID (INT-11, PRIMARY, auto_inc),
elementID (INT-11),
relationType (ENUM)
relationLink (INT-11)
Nun habe ich folgende Abfrage:
SELECT
a.articleID,
a.articleContent,
b.userAlias AS articleAuthor,
d.elementName AS articleCategory
FROM articles AS a
INNER JOIN user AS b
ON (a.articleAuthor = b.userID)
LEFT JOIN relation AS c
ON (a.articleID = c.relationLink)
LEFT JOIN elements AS d
ON (c.elementID = d.elementID)
WHERE (c.relationType = 'article')
AND (d.elementType = 'category')
AND (a.articleID = '1')
Es wäre möglich das ein Artikel mit einer Kategorie verbunden ist dies muss aber nicht sein und genau da liegt das Problem. Bis zum "INNER JOIN" funktioniert alles. Nur die beiden "LEFT JOINS" funktionieren natürlich nicht. Ich habe aber leider keine Lösung gefunden.
Kann mir jemand helfen das zum "Laufen" zu bekommen?
Liebe Grüße,
Markus
Ohne jetzt mich reingedacht zu haben, aber du schränkst ja über das WHERE die kategorie ein, wenn diese natürlich NULL ist matched dein WHERE nicht, dann müsstest du noch sagen
OR category IS NULL
Ohne jetzt mich reingedacht zu haben, aber du schränkst ja über das WHERE die kategorie ein, wenn diese natürlich NULL ist matched dein WHERE nicht, dann müsstest du noch sagen
OR category IS NULL
Die Kategorie steht gar nicht unter "WHERE". Die Kategorie soll mit abgefragt werden.
Auch so funktioniert es leider nicht:
SELECT
a.articleID,
a.articleTextFull,
b.userAlias AS articleAuthor,
d.elementName AS articleCategory
FROM articles AS a
INNER JOIN user AS b
ON (a.articleAuthor = b.userID)
LEFT JOIN relation AS c
ON (a.articleID = c.relationLink)
LEFT JOIN elements AS d
ON (c.elementID = d.elementID)
WHERE ((c.relationType = 'article') OR (c.relationType IS NULL))
AND ((d.elementType = 'category') OR (d.elementType IS NULL))
AND (a.articleID = '2')
Hi,
LEFT JOIN relation AS c
ON (a.articleID = c.relationLink)
LEFT JOIN elements AS d
ON (c.elementID = d.elementID)WHERE (c.relationType = 'article')
AND (d.elementType = 'category')
AND (a.articleID = '1')
Das (c.relationType = 'article') bzw. das (d.elementType = 'category') ist m.E. Teil der Join-Bedinung, nicht Teil der Datensatzauswahl.
Also eher so:
~~~sql
LEFT JOIN relation AS c
ON ((a.articleID = c.relationLink) AND (c.relationType = 'article'))
LEFT JOIN elements AS d
ON ((c.elementID = d.elementID) AND (d.elementType = 'category'))
WHERE (a.articleID = '1')
cu,
Andreas
Das wars! Danke!