2 Stimmen

Einfache MYSQL-Abfrage Frage

    SELECT t.thread_id, t.subject, u.username,
    COUNT(p.post_id) - 1 AS responses, 
    MAX(DATE_FORMAT(p.posted_on, '%e-%b-%y %l:%i %p')) AS last,
    MIN(DATE_FORMAT(p.posted_on, '%e-%b-%y %l:%i %p')) AS first
    FROM threads AS t
    INNER JOIN posts AS p USING (thread_id)
    INNER JOIN users AS u ON t.user_id = u.user_id
    WHERE t.cat_id = 1
    GROUP BY (p.thread_id) ORDER BY last DESC

Ich dachte, ich hätte das richtig gemacht, aber meine Abfrage gibt nur eine Zeile zurück. Ich habe 4 Zeilen mit t.cat_id = 1. Irgendwelche Ideen?

EDIT** BEISPIELDATEN http://i56.tinypic.com/f1e449.png

Im Moment erhalte ich nur ein einziges Ergebnis:

1  THREAD1  USER1  8  17-Apr-11 6:22 AM  17-Apr-11 3:58 AM

Ich hatte erwartet, etwas zu bekommen wie:

1  THREAD1  USER1  8  17-Apr-11 6:22 AM  17-Apr-11 3:58 AM
2  THREAD2  USER1  8  17-Apr-11 6:22 AM  17-Apr-11 3:58 AM
3  THREAD3  USER1  8  17-Apr-11 6:22 AM  17-Apr-11 3:58 AM

1voto

Oded Punkte 475566

Es ist wahrscheinlich, dass es in einer der Join-Tabellen keine entsprechenden Zeilen gibt:

INNER JOIN posts AS p USING (thread_id)
INNER JOIN users AS u ON t.user_id = u.user_id

Eine andere Möglichkeit (die sich nicht gegenseitig ausschließt) ist, dass die Gruppierungsklausel die Zeilen zusammenfasst.

0voto

Johan Punkte 72893

Sie haben t.thread_id ausgewählt, aber Sie gruppieren nach p.thread_id.

Ändern Sie die group by in

GROUP BY (t.thread_id) ORDER BY last DESC  
          ^

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X