Ho visto un tipo simile di domande qui, ma nessuno di loro ha aiutato la mia situazione.Gruppo MySQL per ID e ultimo datetime
Ho una tabella diciamo di prova (usando MySQL MyISAM)
test ha il seguente schema:
TID INT PRIMARY KEY AUTO_INCREMENT
TData varchar (data that i want to select)
TUserID INT (this will be joined with users table, same users can have many records here)
TViewedAt DATETIME (records each time user visits page, datetime format)
Ora ogni volta che una pagina di prova è visitato da utente attualmente connesso, si aggiunge record a questa tabella registrando l'ID utente che ha visitato, alcuni dati e la data e l'ora in cui l'utente visitato con TID viene incrementato automaticamente ogni volta.
Quindi ho una pagina di gestione del back-end in cui posso vedere quale pagina di test visitata dall'utente, quante volte, dati e quando. Fondamentalmente è una tabella con un elenco di 20-25 ultime righe. My Query dovrebbe selezionare solo un record per dati. I dati possono essere uguali per l'utente ma in tempi diversi ma voglio solo selezionare un dato per ogni utente che è il più recente. Quindi, se l'utente ha visitato la pagina di prova 10 volte, 10 record vanno al database ma visualizza solo l'ultimo record sulla tabella. Se un altro utente visita la pagina 15 volte, visualizza 1 record per questo secondo utente, che è l'ultimo di nuovo, quindi in totale ora abbiamo 2 righe visualizzate sul tavolo. Ho ottenuto tutto per funzionare ma GROUP BY per qualche motivo e MAX (data) non mi dà l'ultimo datetime per ogni data.
ecco la mia domanda:
SELECT *
FROM Test
WHERE TUserID = 123
GROUP BY TData
ORDER BY TViewedAt
restituisce 2 righe da cui nessuna di queste righe sono le ultime.
grazie sacco
sì è funzionante, grazie mille, molto semplice e facile – Giorgi
benvenuto, felice di aiutare –
c'è un modo per fare questo che è più efficiente, cioè non richiede subquery? Sto scoprendo che sta uccidendo il mio server – Jason