• User

    [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_____28

    Vorrei raggruppare tramite rispostaId ma vorrei che me li ordinasse in basa alla data DESC (Ho già provato anche con ASC)
    La query che ho usato è questa:
    SELECT * FROM messaggi WHERE autore > '0' GROUP BY rispostaId ORDER BY data DESC

    Ma 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_____28

    Grazie per eventuali risposte! Buonagiornata


  • ModSenior

    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.


  • User Attivo

    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


  • User

    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 * FROM messaggi
    WHERE rispostaId IN (
    SELECT id FROM messaggi
    WHERE autore = '1'

    ) 
    ORDER BY `data` DESC
    

    ) AS m

    GROUP BY rispostaId
    ORDER BY data DESC