In una query MySQL, quando si utilizza l'opzione DISTINCT
, si applica ORDER BY
dopo la rimozione dei duplicati? In caso contrario, c'è un modo per farlo farlo? Penso che stia causando alcuni problemi con il mio codice.L'ORDER BY si applica prima o dopo DISTINCT?
EDIT:
Ecco qualche informazione in più su ciò che sta causando il mio problema. Capisco che, a prima vista, questo ordine non sarebbe importante, dal momento che mi occupo di righe duplicate. Tuttavia, questo non è completamente il caso, dal momento che sto usando un INNER JOIN
per ordinare le righe.
dire che ho un tavolo di discussioni del forum, che contiene questi dati:
+----+--------+-------------+
| id | userid | title |
+----+--------+-------------+
| 1 | 1 | Information |
| 2 | 1 | FAQ |
| 3 | 2 | Support |
+----+--------+-------------+
Ho anche una serie di messaggi in un'altra tabella come questa:
+----+----------+--------+---------+
| id | threadid | userid | content |
+----+----------+--------+---------+
| 1 | 1 | 1 | Lorem |
| 2 | 1 | 2 | Ipsum |
| 3 | 2 | 2 | Test |
| 4 | 3 | 1 | Foo |
| 5 | 2 | 3 | Bar |
| 6 | 3 | 5 | Bob |
| 7 | 1 | 2 | Joe |
+----+----------+--------+---------+
Sto usando il seguente MySQL query per ottenere tutti i thread, quindi ordinarli in base all'ultimo post (supponendo che i post con ID più elevati siano più recenti:
SELECT t.*
FROM Threads t
INNER JOIN Posts p ON t.id = p.threadid
ORDER BY p.id DESC
Questo funziona, e genera qualcosa di simile:
+----+--------+-------------+
| id | userid | title |
+----+--------+-------------+
| 1 | 1 | Information |
| 3 | 2 | Support |
| 2 | 1 | FAQ |
| 3 | 2 | Support |
| 2 | 1 | FAQ |
| 1 | 1 | Information |
| 1 | 1 | Information |
+----+--------+-------------+
Tuttavia, come si può vedere, le informazioni sono corrette, ma ci sono le righe duplicate. Mi piacerebbe rimuovere tali duplicati, quindi ho usato invece SELECT DISTINCT
. Tuttavia, questo ha prodotto il seguente:
+----+--------+-------------+
| id | userid | title |
+----+--------+-------------+
| 3 | 2 | Support |
| 2 | 1 | FAQ |
| 1 | 1 | Information |
+----+--------+-------------+
Questo è ovviamente sbagliato, dal momento che la discussione "Informazioni" dovrebbe essere in cima. Sembrerebbe che utilizzando DISTINCT
i duplicati vengano rimossi dall'alto verso il basso, quindi rimangono solo le righe finali. Ciò causa alcuni problemi nell'ordinamento.
In questo caso, o sto analizzando le cose in modo errato?
Quale problema pensi che stia causando? Che differenza avrebbe fatto? – eggyal
perché dovrebbe importare? prima o dopo l'applicazione distinta, l'ordine dovrebbe essere lo stesso – Rodolfo
puoi mostrarci una query di esempio su cosa stai provando e il problema reale che stai incontrando? –