Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [mysql] - ultimo libro di ogni autore

    ciao a tutti, ho una tabella 'libri' ..riassunta cosi:

    id,libro,idAutore
    1,libro1,mario
    2,libro2,angela
    3,libro3,angela

    che SELECT devo scrivere per trovare l'ultimo libro inserito per ogni autore?
    il risultato dovrebbe essere:
    1,libro1,mario
    3,libro3,angela


    la soluzione sarà pur semplice, ma sto in confusione totale.
    grazie a tutti per l'aiuto !
    Ultima modifica di aquatimer2000; 08-09-2020 a 22:24
    aquatimer2000

  2. #2
    Ricavi il max id per ogni autore
    E questa select la metti in join con tabella
    Con la condizione maxid=id

  3. #3
    ma riesco a farlo con una sola query? puoi farmi un esempio?
    aquatimer2000

  4. #4
    cioè .. per la JOIN non ho problemi, ma ottengo dei risultati strani utilizzando max(id), e cioè:

    SELECT max(id) as maxid, libro, idAutore FROM libri GROUP BY idAutore ORDER BY idAutore ASC

    1,libro1,idAutore(Mario.. sono senzaJoin)
    3,libro2,idAutore(Angela.. sono senzaJoin)

    il problema è che l'id 3 ha come libro, libro3 e non libro2 come evidenziato dal risultato

    cosa sbaglio?


    aquatimer2000

  5. #5
    .. non so se sia la soluzione più corretta e performante ma ho risolto così:

    SELECT id,libro,idAutore
    FROM libri WHERE (id) IN
    ( SELECT MAX(id)
    FROM libri
    GROUP BY idAutore
    )

    in questo modo i risultati sono corretti, adesso, aggiungo la JOIN per leggere in chiaro il nome dell'autore.

    Se c'è una soluzione più corretta o performante, fatemi sapere!
    aquatimer2000

  6. #6
    Quote Originariamente inviata da aquatimer2000 Visualizza il messaggio
    .. non so se sia la soluzione più corretta e performante ma ho risolto così:

    SELECT id,libro,idAutore
    FROM libri WHERE (id) IN
    ( SELECT MAX(id)
    FROM libri
    GROUP BY idAutore
    )

    in questo modo i risultati sono corretti, adesso, aggiungo la JOIN per leggere in chiaro il nome dell'autore.

    Se c'è una soluzione più corretta o performante, fatemi sapere!
    ... ci sei quasi
    , ovviamenete do per scontato che l'id sia univoco
    codice:
    select l.* from libri as l
    inner join 
    ( 
      SELECT MAX(id) as maxId , IdAutore
      FROM libri GROUP BY idAutore
    ) as q
    on l.id=q.maxId

  7. #7
    perfetto grazie mille, utilizzo la tua soluzione!
    aquatimer2000

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.