Ist diese Abfrage überhaupt möglich?
freak
- datenbank
Hallo.
Ich nutze PHP 5.3 mit PostgreSQl 8.4 mit Apache 2.2.14 auf Debian Lenny.
Ich möchte das man auf meiner Seite Kategorien und bestimmte Artikel zu seinen Favoriten hinzufügen kann.
Dazu folgende tabellen:
favorit_lists
listid uid name
favorit_favorites
listid CatOrArticleId catOrArticle(1=Kategorie, 2=Artikel)
board_category
categoryid categoryname
board_articles
articleid aricletitle
Ich möchte mit einem Query:
HOLE Listennamen und ListenIDs VON favorit_lists
WO die UID(userid) genau wie meine ist, anschließend hole für ejde liste, alle Einträge und danach hole für jeden eintrag, falls catOrArticle = 1 ist, den Namen der Kategorie aus board_category oder falls 2, den Namen des Artikels aus board_articles.
Ich verzweifel echt daran, mir fehlt einfach gerade die Logik wie das umzusetzen ist:
SELECT t1.listid, t1.name, t2.catordiscid, t2.catordisc, t3.categoryname, t4.threadtitel
FROM mainproject.favorit_lists AS t1
LEFT JOIN mainproject.favorit_favorits AS t2 ON t2.listid=t1.listid
RIGHT JOIN mainproject.board_category AS t3 ON t3.categoryid=t2.catordiscid
RIGHT JOIN mainproject.board_thread AS t4 ON t4.threadid=t2.catordiscid
WHERE t1.uid=".intval($uid)."
LG, freak
Ich korrigiere:
favorit_lists
listid uid name
favorit_favorites
listid catordiscid catordisc(1=Kategorie, 2=Artikel)
board_category
categoryid categoryname
board_thread
threadid threadtitel
moin,
deine beschreibung ist leider sehr schlecht, es läßt sich nicht genau nachvollziehen, was du willst und es fehlen auch beispieldaten. man kann also nur vermuten. aber was du brauchst ist ein CASE konstrukt und korrelierte unterabfragen. aber davor solltest du wenigtens noch mal aussagekräftige beispieldaten geben und was du als ergebnius haben willst.
Ilja
Okay sollt ihr haben:
#favorit_lists
listid uid name
1 1 "Die besten Diskussionen"
#favorit_favorites
listid catordiscid catordisc(1=Kategorie, 2=Diskussion)
1 1 1
2 95 2
1 22 1
#board_category
categoryid categoryname
1 "Foo"
22 "Bar"
#board_thread
threadid threadtitel
95 "Eine Diskussion"
Ich möchte nun gerne:
"Die besten Diskussionen"
-> "Foo"
-> "Bar"
-> "Eine Diskussion"
yo,
Okay sollt ihr haben:
versuch dich doch mal in unsere lage zu versetzen. deine beispieldaten reichen nicht aus, keine erklärung, teilweise nur einen datensatz in den tabellen, keine erklärung wie genau die ausgabe aussehen soll, ob das spalten sind oder datensätze....
Ilja
#favorit_favorites
listid catordiscid catordisc(1=Kategorie, 2=Diskussion)
1 1 1
2 95 2
1 22 1#board_category
categoryid categoryname
1 "Foo"
22 "Bar"#board_thread
threadid threadtitel
95 "Eine Diskussion"
Mal auf diese 3 konzentriert
Ich möchte nun gerne:
-> "Foo"
-> "Bar"
-> "Eine Diskussion"
Dann wäre ein Ansatz in etwa so:
[code=sql]
SELECT CASE WHEN t1.catordisc = 1 THEN t2.categoryname ELSE t3.threadtitel END AS beste_diskussion
FROM favorit_favotites AS t1
JOIN board_category AS t2 ON t1.catordiscid = t2.categoryid
JOIN board_thread AS t3 ON t1.catordiscid = t3.threadid
[/code]