Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    55

    [MYSQL] tra ORDER BY e GROUP BY...

    Fermo restando che mi perdonerete se entro qui dentro circa una volta all'anno e per di più quando ho dei problemi , vi sottopongo questo problemino. C'è una discussione simile poco sotto questa, ma mi pare che non sia lo stesso caso (o forse non l'ho capito io...)

    Allora:
    ho questa tabella
    id | id_utente | id_album | corrispondente | tempo

    Il codice php usa la tabella per creare una sorta di "registro", in cui vengono registrate alcune azioni compiute da [id_utente] che sta utilizzando [id_album], e compie azioni nei confronti di [corrispondente], ad una certa ora (tempo).
    Per cui ci saranno tante righe con stesso id_utente, id_album e corrispondente, ma orari diversi.
    Io devo estrarre 1 sola riga per ogni tripletta id_utente/id_album/corrispondente, ma questa riga deve corrispondere all'ultima azione effettuata.

    Ho provato con:
    codice:
    $query="SELECT corrispondente, DATE_FORMAT(max(tempo), \"%d%/%m%/%Y   %H.%i\") as lastact FROM `registro` WHERE id_utente={$_COOKIE[id_user]} and id_album={$_COOKIE[album]}  group by corrispondente order by tempo desc ";
    ma in realtà ho notato che l'ordinamento per tempo non è corretto...

    Vi metto un paio di immagini:
    La tabella completa ordinata per [tempo desc]:
    http://f.cl.ly/items/1i062u1I3W2e040...2015.54.12.jpg

    E il risultato di una selezione:
    http://f.cl.ly/items/3V0t1T1R3r0q254...2016.08.58.jpg

    Grazie...

  2. #2
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Davvero non ho capito cosa ti turba

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    55
    Originariamente inviato da franzauker2.0
    Davvero non ho capito cosa ti turba
    Mi turba che il risultato di quella query non è ordinato in base alla colonna 'tempo'... Hai visto la seconda immagine?
    (tra l'altro, non è possibile visualizzare le immagini all'interno dei post?)

  4. #4
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Originariamente inviato da bulvio
    Mi turba che il risultato di quella query non è ordinato in base alla colonna 'tempo'... Hai visto la seconda immagine?
    (tra l'altro, non è possibile visualizzare le immagini all'interno dei post?)
    il paciugamento col MAX(tempo) mi lascia un pochino perplesso.
    Inizia a toglierlo via.
    Perchè vuoi l'ordine per lastact, non per tempo.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    55
    Capito...
    Il problema non era il MAX, che è corretto e serve per selezionare, tra i vari record, quello col tempo più recente.
    L'errore stava nell'ordinamento: pensavo che non ci fosse differenza, ai fini dell'ORDER BY, tra il risultato del DATE_FORMAT e 'tempo', che invece è in formato datetime.
    Ho riscritto la query mettendo la funzione date_format come clausola per l'order by, e funziona.

    codice:
    SELECT corrispondente, DATE_FORMAT( MAX( tempo ) ,  "%d%/%m%/%Y   %H.%i" ) AS lastact
    FROM  `registro` 
    WHERE id_utente =15
    AND id_album =31
    GROUP BY corrispondente
    ORDER BY DATE_FORMAT( MAX( tempo ) ,  "%d%/%m%/%Y   %H.%i" ) DESC

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Sicuro che funzioma ???

    Non conosco MySql ma solitamente DateFormat restituisce una stringa


    Se fosse cosi significa che:
    20/05/2013
    19/06/2013
    21/05/2013

    Li ordina ( DESC ) cosi:
    21/05/2013
    20/05/2013
    19/06/2013 <<---


    .

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    55
    Originariamente inviato da nman
    Sicuro che funzioma ???

    Non conosco MySql ma solitamente DateFormat restituisce una stringa


    Se fosse cosi significa che:
    20/05/2013
    19/06/2013
    21/05/2013

    Li ordina ( DESC ) cosi:
    21/05/2013
    20/05/2013
    19/06/2013 <<---


    .
    In effetti ho ancora dei dubbi...
    ho provato e finora funziona, è anche vero però che i record sono tutti raggruppati in un solo mese (gennaio). Tra due giorni vedremo cosa succede...
    Avevo scelto di ordinare per [tempo] proprio per non avere quel problema, ma evidentemente subentra altro...

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    55
    Provo così:
    codice:
    SELECT corrispondente, DATE_FORMAT( MAX( tempo ) ,  "%d%/%m%/%Y   %H.%i" ) AS lastact, UNIX_TIMESTAMP( MAX( tempo ))
    FROM  `registro` 
    WHERE id_utente =15
    AND id_album =31
    GROUP BY corrispondente
    ORDER BY UNIX_TIMESTAMP( MAX( tempo )) DESC

  9. #9
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Scusate ma è abbastanza ovvio che l'ordinamento per un DATETIME "funzioni", così come NON funziona trasformarlo in una stringa che ha invertiti i componenti.
    "funziona" se ordinato con
    anno-mese-giorno, e non giorno-mese-anno, in quanto l'ordinamento lessicografico non capisce, ovviamente, che si tratta di una data e non di una stringa.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    55
    Originariamente inviato da franzauker2.0
    Scusate ma è abbastanza ovvio che l'ordinamento per un DATETIME "funzioni", così come NON funziona trasformarlo in una stringa che ha invertiti i componenti.
    "funziona" se ordinato con
    anno-mese-giorno, e non giorno-mese-anno, in quanto l'ordinamento lessicografico non capisce, ovviamente, che si tratta di una data e non di una stringa.
    nella prima query, l'ordinamento era per 'tempo', che è un campo in formato DATETIME. Tuttavia, non funzionava...
    Così come, giustamente come hai fatto notare tu, non funzionava per date_format.
    Ora con il timestamp, sembra funzionare...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.