sql >> Databasteknik >  >> RDS >> Mysql

visa de två senaste posterna i varje kategori från en mysql-tabell

Denna typ av resultat hanteras bäst av fönsterfunktioner i andra RDBMS men tyvärr har Mysql inga fönsterfunktioner så alternativt finns det en lösning att använda användardefinierade variabler för att tilldela en rangordning för rader som tillhör samma grupp

SELECT  `id`, `category`, `names`
FROM (
SELECT *,
@r:= CASE WHEN @g = category THEN @r + 1 ELSE 1 END rownum,
@g:=category
FROM test
  CROSS JOIN(SELECT @g:=NULL ,@r:=0) t
  ORDER BY category,id desc
) c
WHERE c.rownum <=2 

Ovanstående fråga ger dig 2 senaste poster (på basis av id) per kategori. Du kan ändra den sista delen av frågan med where-sats till valfritt antal för att visa n resultat per grupp, till exempel för att visa 3 poster sedan WHERE c.rownum <= 3 och så vidare

Demo



  1. Är primärnycklarna passé?

  2. Hur skiljer sökresultaten åt efter kategori? MySQL + PHP

  3. MySQL/SQL hämta de första 40 tecknen i ett textfält?

  4. Oavsiktliga biverkningar – Sovsessioner som håller lås