2 Fragen zu JOINS

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

  • 2 Fragen zu JOINS

    Hallo,

    ich bin neu in diesem Forum und hoffe, dass ich euch mit dieser Frage nicht allzusehr auf die nerven gehe

    nundenn, ich habe einen Query, den hier:

    PHP-Code:
    $sql 'SELECT  MAX(k.ID) as ID, 
                      k.Name as Name,
                      t.topic as topic,
                      u.Name as autor,
                      count(t.ID) as tcount
              FROM `'
    .DBP.'forum_kat` as k
              LEFT JOIN `'
    .DBP.'forum_threads` as t ON t.fid = k.ID
              LEFT JOIN `'
    .DBP.'users` as u ON t.autor = u.ID
              WHERE k.klasse="'
    .$vclass->klasse.'"
                  AND t.klasse="'
    .$vclass->klasse.'"
              GROUP BY k.ID
              ORDER BY k.Name asc'

    Der Funktioniert auch soweit ganz gut. Hier aber erst noch ein wenig Background-Wissen:

    forum_kat
    Hier sind die Kategorien bzw. Foren gespeichert.
    ID und Name

    forum_threads
    Hier sind die Threads gespeichert.
    fid findet als ForenID zur forum_kat
    dann gibts noch autor (ID des Users) lastpost (Zeit des letzten Postes in dem Thread halt) und topic

    forum_ans
    Hier wären die Beiträge zu den Threads gespeichert, dass soll uns aber nun nicht interessieren

    users
    Hier sind die Userdaten gespeichert. Erwähnenswert sind die Spalten ID und Name


    Mein Query bewirkt, dass die Kategorien/Foren alphabetisch angezeigt werden und falls vorhanden auch ein Thread aus der Fore und den Usernamen des Autors.

    Allerdings habe ich aktuell noch 2 Probleme:
    (1) Kategorien, in denen noch kein Beitrag/Thread geschrieben wurden, werden nicht angezeigt
    (2) Der Thread, der zu der Kategorie rausgesucht wird, ist nicht der neuste (lastpost am größten logischerweise), sondern einfach der erste, der dem Query in die Quere kommt (z.B. ID 1)

    Wie kann ich die Probleme lösen?

    Vielen Dank schonmal

    CrashMan87

  • #2
    Re: 2 Fragen zu JOINS

    (1) Kategorien, in denen noch kein Beitrag/Thread geschrieben wurden, werden nicht angezeigt
    das sollte durch den LEFT JOIN eigentlich verhindert werden, aber
    AND t.klasse="'.$vclass->klasse.'"
    könnte unwahr sein ... was bedeuten die klassen? poste bitte nächstes mal die generierte query, eventuell stellen sich solche fragen dann nicht.

    bau die query mal stück für stück zusammen, schau, was sie liefert, ...
    (2) Der Thread, der zu der Kategorie rausgesucht wird, ist nicht der neuste (lastpost am größten logischerweise), sondern einfach der erste, der dem Query in die Quere kommt (z.B. ID 1)
    http://dev.mysql.com/doc/mysql/en/ex...group-row.html
    Manual: The Group-wise Maximum of a Certain Field ... müßte dir helfen, denke ich.

    ach ja,
    MAX(k.ID) as ID
    mir scheint, du gruppierst auf diesem alias .. also auf MAX(id), nicht auf id ... soll das so sein?

    wie gesagt, stück für stück aufbauen ...
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Danke für deine Antwort

      Wenn LEFT JOIN das verhindert, dass auch Kategorien ohne Thread angezeigt werden, was muss ich stattdessen benutzen?

      AND t.klasse="'.$vclass->klasse.'"
      ist schon richtig.
      Die Spalte klasse legt fest, zu welcher "Klasse" leute gehören (Klasse = Schulklasse / Gruppe von Usern). Und $vclass->klasse wird beim Login festgelegt und enthält die ID der eigenen "Klasse"


      mir scheint, du gruppierst auf diesem alias .. also auf MAX(id), nicht auf id ... soll das so sein?
      Von Max/Group hab ich - ehrlich gesagt - noch sogut wie keine Ahnung. Ich hab damit rumprobiert, bis endlich jede Kategorie statt jeder Thread durchgegangen wurde. (Ursprünglich wurde jeder Thread angezeigt und daneben die Kategorie. Ich möchte aber die Kategorien mit dem jeweils neusten Thread angezeigt bekommen)

      Kommentar

      Lädt...
      X