problematische query (forum)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • problematische query (forum)

    mein forum besteht aus:
    - cat (id, name)
    - subcat (id, catid, name)
    - threads (id, subid, name, datum, etc)
    - posts (id, threadid, userid, text)

    wie ihr seht sind die jeweilig untergeordneten tabellen immer nur der einfach übergeordneten tabelle zugeordnet.

    also posts->threads, threads->subcats, subcats->cats, aber nicht untereinander noch verknüpft.

    dies ist auch nötig:
    1. um die params möglichst gering zu halten
    2. um die threads/posts beweglich zu halten (move threads etc)

    ich möchte jetzt, da wo meine übersicht ist:

    category 1:
    -------------------------------------------------------------------
    subcat 1
    subcat 2
    etc subcat
    -------------------------------------------------------------------

    category2:
    -------------------------------------------------------------------
    subcat 3
    subcat 4
    -------------------------------------------------------------------

    statistiken, wie letzter post in welchem thread von welchem user ausgeben.
    wenn man jetzt oben schaut, kann ich ja nicht einfach
    Code:
    SELECT t1.id, t1.catid, t1.name as catname, t2.posts, t2.etc
    FROM cat AS t1
    LEFT JOIN posts AS t2 ON t2.subcatid = t1.id
    machen, weil t2.subcatid nicht existiert.

    seht ihr ne möglichkeit mittels eines mehrfachjoins das selbe zu erreichen?

    also erst subcat, dann mittels subid die threads, dann mittels threadid die posts?

  • #2
    dann bau die subcat tabelle noch mit rein
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Code:
      SELECT t1.id AS postid, t1.tid, MAX( t1.datum )  AS lastdate, t2.id AS threadid, t2.subid, t2.titel, t3.id AS subid, t3.catid, t3.subname, t4.id AS cid, t4.catname
      FROM f_cat AS t4
      LEFT  JOIN f_sub AS t3 ON t3.catid = t1.id
      LEFT  JOIN f_threads AS t2 ON t2.subid = t3.id
      LEFT  JOIN f_posts AS t1 ON t1.tid = t2.id
      GROUP  BY t3.id
      ORDER  BY lastdate
      MySQL meldet:

      Cross dependency found in OUTER JOIN. Examine your ON conditions


      war ja klar :/

      EDIT:
      fehler meinerseits, das musste so heissen:
      Code:
      SELECT MAX( p.datum ) AS lastdate, 
      t.id AS threadid, t.subid, t.titel, 
      s.id AS subid, s.catid, s.subname, s.subdescr, 
      c.id AS cid, c.catname, 
      u.id, u.username
      FROM f_cat AS c
      LEFT JOIN f_sub AS s ON s.catid = c.id
      LEFT JOIN f_threads AS t ON t.subid = s.id
      LEFT JOIN f_posts AS p ON p.tid = t.id
      LEFT JOIN u_user AS u ON u.id = p.userid
      GROUP BY s.id
      ORDER BY lastdate DESC , catid, subid ASC



      EDIT:
      allerdings nimmt er so die ersten threads, obwohl das "lastdate" der posts stimmt.
      er selected zuerst die categorien.
      dann die subcategorien passend zu den categorien
      dann die threads passend zu den subcategorien
      dann die posts passend zu den threads
      dann die user passend zu den posts

      er soll aber die cats, dann die subcats passend zu den cats
      dann die posts, passend zu den threads und/in der jeweiligen subcat
      und dann dann rest

      Zuletzt geändert von rythms; 27.11.2003, 10:10.

      Kommentar

      Lädt...
      X