Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it L'avatar di dvd86
    Registrato dal
    Oct 2006
    Messaggi
    166

    [SQL] - ordinamento select complesso

    ciao!
    non riesco a ordinare come vorrei i risultati di una query!

    allora....comincio spiegando le 2 tabelle interessate!

    table artisti:
    artista_id (key)
    artista_nome
    ecc....


    table opera:
    opera_id (key)
    artista_id (foreign key)
    data (la data dell'ultima modifica del record)


    quello che voglio ottenere è l'elenco degli artisti ordinati per opera.data

    query:
    codice:
    SELECT * FROM artista LEFT JOIN opera ON artista.artista_id=opera.artista_id GROUP BY artista.artista_id ORDER BY opera.data DESC
    Uso un LEFT JOIN perche voglio mostrare anche gli artisti senza nessuna opera inserita...

    questa query funziona in parte....nel senso che mi ordina per opera.data DESC non l'opera + recente dell'artista ma ne prende una a caso....

    come dovrei fare?

  2. #2
    Utente bannato
    Registrato dal
    Apr 2008
    Messaggi
    146
    non so se fuizione siccome no ho modo di provarlo comunque potresti provare

    SELECT max(data) FROM artista LEFT JOIN opera ON artista.artista_id=opera.artista_id GROUP BY artista.artista_id ORDER BY opera.data DESC

    prova non so se max funziona con le date

  3. #3
    Utente di HTML.it L'avatar di dvd86
    Registrato dal
    Oct 2006
    Messaggi
    166
    innanzitutto grazie....
    cmq la query non da errori xò il risultato è lo stesso che con la mia query....

  4. #4
    Il GROUP BY ti impedisce l'ordinamento, dovresti provare usando un ORDER BY su due campi, piuttosto che un GROUP BY insieme all'ORDER BY

  5. #5
    Utente bannato
    Registrato dal
    Apr 2008
    Messaggi
    146
    prova a cacciare order by vedi cosa ti viene,
    altrimenti dovresti provare a creare una view (vista)
    intando fammi sapere che accade senza order, vorrei sapere se ti estrae almeno il massimo per ogni gruppo

  6. #6
    Utente di HTML.it L'avatar di dvd86
    Registrato dal
    Oct 2006
    Messaggi
    166
    Originariamente inviato da thunderlips
    Il GROUP BY ti impedisce l'ordinamento, dovresti provare usando un ORDER BY su due campi, piuttosto che un GROUP BY insieme all'ORDER BY
    In effetti è tutta colpa del GROUP BY....lo stesso dicasi se uso DISTINCT!

    Però se nn uso il group by la query mi restituisce + volte lo stesso artista...

  7. #7
    Utente di HTML.it L'avatar di dvd86
    Registrato dal
    Oct 2006
    Messaggi
    166
    Originariamente inviato da killer-gio
    prova a cacciare order by vedi cosa ti viene,
    altrimenti dovresti provare a creare una view (vista)
    intando fammi sapere che accade senza order, vorrei sapere se ti estrae almeno il massimo per ogni gruppo
    Senza Order ottengo la data dell'opera + recente x ciascun artista....

  8. #8
    Originariamente inviato da dvd86
    In effetti è tutta colpa del GROUP BY....lo stesso dicasi se uso DISTINCT!

    Però se nn uso il group by la query mi restituisce + volte lo stesso artista...
    E' normale, perché con la JOIN ti restituisce l'elenco dei record della seconda tabella, che è in relazione alla prima per artista, quindi avrai un dato artista e le varie opere.

    Devi ordinare per data e per id artista, poi da quel recordset ti vai a gestire le informazioni come serve a te, però il campo relativo all'artista verrà ripetuto per tutte le righe con cui è in relazione.

  9. #9
    Utente bannato
    Registrato dal
    Apr 2008
    Messaggi
    146
    Originariamente inviato da dvd86
    Senza Order ottengo la data dell'opera + recente x ciascun artista....
    allora fai cosi, scivo al volo


    CREATE VIEW artisti_data AS
    SELECT max(data) FROM artista LEFT JOIN opera ON artista.artista_id=opera.artista_id GROUP BY artista.artista_id ORDER BY opera.data DESC

    select * from artisti_data order by data desc

    prova ae fammi sapere

  10. #10
    Utente di HTML.it L'avatar di dvd86
    Registrato dal
    Oct 2006
    Messaggi
    166
    CREATE VIEW artisti_data AS SELECT max(data) FROM artista LEFT JOIN opera ON artista.artista_id=opera.artista_id GROUP BY artista.artista_id ORDER BY opera.data DESC
    errore di sintassi....


    select * from artisti_data order by data desc
    nn vedo a cosa serve...

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