sql >> Databáze >  >> RDS >> Mysql

Platí ORDER BY před nebo po DISTINCT?

Dvě věci k pochopení:

  1. Obecně řečeno, sady výsledků jsou neuspořádané pokud nezadáte ORDER BY doložka; v rozsahu, v jakém určíte nepřísné pořadí (tj. ORDER BY nad nejedinečnými sloupci) není definováno pořadí, ve kterém se v sadě výsledků objevují záznamy, které jsou v tomto pořadí stejné.

    Mám podezření, že zadáváte takto nepřísné pořadí, což je kořen vašich problémů:ujistěte se, že vaše objednávka je přísná zadáním ORDER BY přes sadu sloupců, která je dostatečná k jedinečné identifikaci každého záznamu, u kterého vám záleží na jeho konečné pozici v sadě výsledků.

  2. DISTINCT může používat GROUP BY , což způsobí, že výsledky budou seřazeny podle seskupených sloupců; to znamená SELECT DISTINCT a, b, c FROM t vytvoří sadu výsledků, která vypadá jako ORDER BY a, b, c bylo aplikováno. Opět platí, že zadání dostatečně přísného pořadí, aby vyhovovalo vašim potřebám, přepíše tento efekt.

Po vaší aktualizaci, s ohledem na můj bod č. 2 výše, je jasné, že účinek seskupení výsledků k dosažení DISTINCT znemožňuje následné řazení podle neseskupeného sloupce p.id; místo toho chcete:

SELECT   t.*
FROM     Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC


  1. ERROR 1366 (HY000):Nesprávná hodnota řetězce:'\xF0\x9F\x98\x9C' pro sloupec 'komentář' na řádku 1

  2. Použití if(isset($_POST['submit'])) k nezobrazení ozvěny při otevřeném skriptu nefunguje

  3. Skupinově maximum

  4. Který SQL dotaz je lepší, MATCH AGAINST nebo LIKE?