Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538

    [Mysql] Ordinare i dati di una join

    Ho queste due tabelle:

    codice:
    Autori
    
    | id |  nome  |
       1   Paolo
       2   Ciccio
       3   Piero
    
    Libri
    
    | id | titolo | id_autore | data |
       1   LibroA       1
       2   LibroB       2
       3   LibroC       1
       4   LibroD       1
       5   LibroE       3
       6   LibroF       2
       7   LibroG       1 
       8   LibroH       1
       9   LibroI       3
    dove data contiene delle date in formato UNIX_TIMESTAMP

    Ho bisogno di estrarre, per ogni autore, l'ultimo libro scritto in ordine di tempo. Ho pensato ad una query del tipo

    codice:
    SELECT autori.nome, libri.titolo, libri.data
    FROM 
    autori LEFT JOIN libri ON libri.id_autore = autori.id
    GROUP BY autori.id
    ORDER BY libri.data DESC
    Però il risultato è che estrae per ogni autore il primo libro che gli appartiene che compare nella tabella libri.

    Come posso fare?

  2. #2
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    up!

  3. #3
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    nessuno che può aiutarmi?

  4. #4
    Originariamente inviato da buba88
    nessuno che può aiutarmi?
    se puoi fare una query annidata non hai alcun problema...
    codice:
    SELECT autori.nome, libri.titolo, libri.data
    FROM 
    autori LEFT JOIN libri ON libri.id_autore = autori.id
    where libri.data = any 
    (select max(data)
    from libri 
    GROUP BY libri.id_autore)
    ORDER BY libri.data DESC
    se la release non permette la query annidata si potrebbe giochicchiare con having. Pero' preferisco la tabella temporanea buona per tutte le release.

    Crei una tabella temporanea ordinata per data DESC in modo che l'ordinamento nella tabella sia dal piu' recente al piu' vecchio, cosi' il primo che trova e' quello che ti interessa.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    mmm se provo a fare query annidate mi da errore.

    con la tabella temporanea come potrei fare? (io preferivo fare il tutto con un unica query, se era possibile)

  6. #6
    codice:
    i° QUERY
    
    CREATE TEMPORARY TABLE temp
    SELECT *
    FROM autori 
    LEFT JOIN libri ON libri.id_autore = autori.id
    ORDER BY libri.data DESC;
    
    II° query
    SELECT nome, titolo, data
    FROM temp
    GROUP BY id_autore
    ORDER BY data DESC;
    GROUP BY serve per fare raggruppamenti... quindi per selezionare un dato specifico non va granche' bene.

    Prova...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    mmm mi da un messaggio di errore alla seconda query:

    #1146 - Table 'test.temp' doesn't exist

    però alla prima query nn ha dato nessun errore

  8. #8
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    quell'errore lo dava da phpmyadmin, facendo direttamente dal mysql funziona. Faccio qualche altra prova e ti faccio sapere.

  9. #9
    Originariamente inviato da buba88
    mmm mi da un messaggio di errore alla seconda query:

    #1146 - Table 'test.temp' doesn't exist

    però alla prima query nn ha dato nessun errore
    Se provi con phpmyadmin... le due query vanno eseguite nella stessa finestra di query. Le tabelle temporanee esistono solo per la durata della connessione. Phpmyadmin si connette e sconnette ad ogni query.

    la query va chiusa con il ;

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.