La cosa ID funzionerebbe comunque teoricamente, a condizione che l'ID non cambi mai...
Consiglierei di utilizzare un campo timestamp nella struttura della tabella chiamato "date" e di utilizzare "CURRENT_TIMESTAMP" come valore predefinito, questo popolerà automaticamente la data/ora sul record al momento dell'inserimento...
Ordina per questo campo DESC, limite x
Inoltre, ho riscontrato molti casi di dati errati visualizzati grazie al raggruppamento... Assicurati che i tuoi dati siano corretti prima di applicare ORDER BY e LIMIT
Per ottenere i post da utente1 a utente1 non è necessario raggruppare per:
SELECT * FROM posts
WHERE toID=fromID
ORDER BY date DESC LIMIT 3
Per ricevere i post da * all'utente1:
SELECT * FROM posts
WHERE toID="USER1_ID"
ORDER BY date DESC LIMIT 3
Per ricevere i post da * all'utente1, solo utenti unici:
SELECT * FROM posts
WHERE toID="USER1_ID"
GROUP BY FromID
ORDER BY date DESC LIMIT 3
A volte ti imbatterai nel problema in cui i record GROUPED non sono ordinati per ORDER BY, perché ORDER BY viene applicato al risultato DOPO l'applicazione del raggruppamento... Per ottenere una soluzione alternativa:
SELECT * FROM (
SELECT * FROM posts
WHERE toID="USER1_ID"
ORDER BY date DESC
) as `derived` GROUP BY FromID LIMIT 3
Per ottenere gli ultimi 3 utenti che si sono inviati più di recente un post:
SELECT * FROM (
SELECT * FROM posts
WHERE toID=fromID
ORDER BY date DESC
) as `derived` GROUP BY FromID LIMIT 3