2017-01-20 4 views
1

Ich habe zwei Tabellen, group und groupAccess. Einer enthält Informationen für jede "Gruppe" und der andere enthält alle Zeiten, zu denen auf eine Gruppe zugegriffen wird, einschließlich der eindeutigen ID und des Zeitstempels.Bestellung MySQL-Tabelle mit Zeitstempel aus verschiedenen Tabelle

Mein Ziel ist es, alle Gruppen nach der letzten Zeit zu ordnen, auf die sie zugegriffen haben.

Ich habe auf halbem Weg, diese Abfrage ermöglicht es mir, alle Gruppen in der richtigen Reihenfolge zu erhalten, aber es gibt doppelte Gruppen, die ich entfernen muss.

SELECT a.* 
FROM groups a 
INNER JOIN groupAccess b ON a.group_id = b.group_access_id 
ORDER BY access_time DESC 

Ich habe versucht GROUP BY oder DISTINCT verwenden, was jedoch bricht die (derzeit) korrekte Reihenfolge der Gruppen. Wie kann ich das beheben?

Antwort

1

Verwenden Sie max() und GROUP BY, um die späteste Zugriffszeit für jede Gruppe zu finden, und verbinden Sie dann diese Tabelle mit group. Das ist:

SELECT 
    a.* 
    , b.last_access_time 
FROM 
    groups a 
    INNER JOIN (
     select 
      group_access_id 
      , max(access_time) as last_access_time 
     from groupAccess 
     group by 
      group_access_id 
    ) b ON a.group_id = b.group_access_id 
ORDER BY b.last_access_time DESC 
Verwandte Themen