freak: Ist diese Abfrage überhaupt möglich?

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

  1. Ich korrigiere:

    favorit_lists
    listid uid name

    favorit_favorites
    listid catordiscid catordisc(1=Kategorie, 2=Artikel)

    board_category
    categoryid categoryname

    board_thread
    threadid threadtitel

    1. 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

      1. 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"

        1. 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

        2. #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]