Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL seleciona as postagens mais recentes das tabelas


A coisa do ID ainda funcionaria teoricamente, desde que os IDs nunca mudem ...

Eu recomendaria usar um campo timestamp na estrutura da tabela chamado "date" e usar o "CURRENT_TIMESTAMP" como valor padrão, isso preencherá automaticamente a data/hora no registro ao inserir ...

Ordene por este campo DESC, limite x

Além disso, experimentei muitos casos de dados errados aparecendo graças ao agrupamento... Certifique-se de que seus dados estejam corretos antes de aplicar ORDER BY e LIMIT

Para obter postagens de user1 para user1, não há necessidade de agrupar por:
SELECT * FROM posts 
WHERE toID=fromID
ORDER BY date DESC LIMIT 3

Para obter postagens de * para user1:
SELECT * FROM posts 
WHERE toID="USER1_ID"
ORDER BY date DESC LIMIT 3

Para obter postagens de * para user1, apenas usuários únicos:
SELECT * FROM posts 
WHERE toID="USER1_ID"
GROUP BY FromID
ORDER BY date DESC LIMIT 3

Às vezes você vai se deparar com o problema em que os registros GROUPED não são ordenados por ORDER BY, porque o ORDER BY é aplicado ao resultado APÓS o agrupamento ser aplicado... Para obter uma solução alternativa:
SELECT * FROM (
  SELECT * FROM posts 
  WHERE toID="USER1_ID"
  ORDER BY date DESC
) as `derived` GROUP BY FromID LIMIT 3

Para obter os últimos 3 usuários que enviaram uma postagem mais recentemente:
SELECT * FROM (
  SELECT * FROM posts 
  WHERE toID=fromID
  ORDER BY date DESC
) as `derived` GROUP BY FromID LIMIT 3