- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- [mysql] group by ordinato secondo le mie esigenze
-
[mysql] group by ordinato secondo le mie esigenze
Salve a tutti, ho questo problema:
Ho i seguenti dati:
id - autore - rispostaId - messaggio - data
1_____2_______1_________ciao_____20
2_____3_______1_________bene_____23
3_____4_______3_________pippo____26
4_____5_______3_________pluto_____28Vorrei raggruppare tramite
rispostaId
ma vorrei che me li ordinasse in basa alladata
DESC (Ho già provato anche con ASC)
La query che ho usato è questa:
SELECT * FROMmessaggi
WHEREautore
> '0' GROUP BYrispostaId
ORDER BYdata
DESCMa il risultato è:
id - autore - rispostaId - messaggio - data
1_____2_______1_________ciao_____20
3_____4_______3_________pippo____26**invece io vorrei: **
id - autore - rispostaId - messaggio - data
2_____3_______1_________bene_____23
4_____5_______3_________pluto_____28Grazie per eventuali risposte! Buonagiornata
-
Io non sto capendo l'ordinamento che tu vorresti.
Rispetto a quello che viene e quello che vorresti mi sembra la stessa cosa.ID dal piu piccolo al piu grande.
Autore idem.
Risposta ID idem.
Messaggio ordine alfabetico.
Data, dalla piu piccola alla piu grande.Su tutti e due i tuoi esempi.
-
Ciao misotropici,
credo che l'ordinamento fatto in questo modo (cioè dopo aver raggruppato) non sia la risposta a ciò che cerchi.
Infatti, tu vorresti ordinare per data, ma quando raggruppi per rispostaId, tutti quelli che hanno lo stesso valore in quel campo vengono raggruppati in un solo record.
A quel punto, però, in data quale valore dovrebbe esserci tra quelli che ha unito? E lo stesso problema si pone anche per le colonne messaggio, autore e id...Per poterti aiutare dovresti almeno spiegarci qual'è il tuo obiettivo. Ad occhio mi sembra tu voglia estrarre l'ultimo messaggio, ma non ne sono sicuro.
Una via per fare quello che cerchi rapidamente è concatenare due query, mandando in input alla group by una tabella già ordinata per data con DESC.Ciao,
Luca Bartoli
-
salve alla fine ho risolto grazie all'aiuto di un amico, il mio intento era quello di raggruppare per
rispostaId
ma mostrando il messaggio più nuovo.
Sto semplicemendo facendo un sistema di repliche a messaggi privati sul mio sito, quindi se uno replica a un messaggio la deve mostrare per prima.SELECT * FROM (
SELECT * FROMmessaggi
WHERErispostaId
IN (
SELECT id FROMmessaggi
WHEREautore
= '1') ORDER BY `data` DESC
) AS m
GROUP BY
rispostaId
ORDER BYdata
DESC