MySQL abfrage sortieren über 2te Tabelle?

jackie05

Erfahrenes Mitglied
Hallo,
ich versuche meine 1te Tabelle "users" zu Sortieren anhand der Spalte "post_time" von der 2ten Tabelle "posts", leider klappt das nicht so richtig.

In der Tabelle users sind einige User gespeichert und jeder User kann etwas Posten und diese Posts werden in der 2ten Tabelle "posts" hinzugefügt.
Jetzt möchte ich gerne die User anhand der "post_time" spalte Sortieren von Tabelle2 "posts", daher soll nur das zuletzt hinzugefügte post_time beachtet werden und die User Aufsteigend Sortieren.

Ich hab das mal so versucht:
PHP:
$query = "SELECT u.*,p.post_time FROM users u INNER JOIN posts p ON u.username=p.username ORDER BY p.post_time DESC";
if ($result = $mysqli->query($query)) {
    while ($row = $result->fetch_assoc()) {
        .........
    }
}

Das scheint in etwa zu funktionieren, nur werden mir dann sehr viele einträge Doppelt ausgegeben.
Was habe ich falsch gemacht oder wie könnte man es am einfachsten lösen?

Ich danke euch schonmal für die Hilfe.

Gruss
 
SQL:
SELECT 
    u.id,
    u.username,
    MAX(p.post_time) AS post_time
FROM 
    users u 
    INNER JOIN posts p 
    ON u.username=p.username 
GROUP BY
    u.id,
    u.username
ORDER BY 
    MAX(p.post_time) DESC

Und nicht vergessen. Bei einem GROUP BY auf das u.* verzichten und alle Felder auflisten, die du haben willst. Und zwar im SELECT und im GROUP BY.
 
Hallo nochmal,
mir ist aufgefallen, das wenn bei manchen Usern noch keine posts vorhanden sind, das diese User in der abfrage nicht dabei sind.
Wie kann ich das beheben?

Gruss
 
INNER JOIN durch LEFT JOIN ersetzen
SQL:
SELECT
    u.id,
    u.username,
    MAX(p.post_time) AS post_time
FROM
    users u
    LEFT JOIN posts p
    ON u.username=p.username
GROUP BY
    u.id,
    u.username
ORDER BY
    MAX(IFNULL(p.post_time, 0)) DESC
 

Neue Beiträge

Zurück