Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL seleziona i post più recenti dalle tabelle

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