Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: DISTINCT mysql

  1. #1

    DISTINCT mysql

    ciao a tutti, ho un problema con il recupero di alcuni dati con mysql

    devo estrarre il nome di alcuni libri da una tabella e il nome degli autori che sta in un'altra tabella, ma ogni libro può avere più autori.
    ho provato varie sintassi, ma non riesco, o mi restituisce una riga per ogni autore, e quindi più righe con lo stesso titolo, oppure un solo titolo ma un solo autore...

    ecco cosa la query
    Codice PHP:
    SELECT DISTINCT titoloautori.cognome FROM libro JOIN ha_scritto ON ha_scritto.id_libro libro.id_libro JOIN autori ON id_autore id GROUP BY titolo 

    avete idee?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    27
    Se ogni libro può avere più autori, è logico che una query di join ottenga più record con lo stesso titolo per i libri che hanno più di un autore.

    Avrai le coppie
    titolo1 autore1
    titolo1 autore2
    titolo2 autore3
    ecc...

    Come vorresti invece l'output? Vorresti una colonna "Autori" con la stringa che concatena in una lista i vari autori?

    Posta la struttura delle 3 tabelle, così si vede se il db è fatto bene e come creare una query che risponda all'output che hai in mente.

  3. #3
    si, vorrei avere una riga con il titolo e una colonna con TUTTI gli autori (nella stessa riga)

    ecco le 3 tabelle

    si, vorrei avere una riga con il titolo e una colonna con TUTTI gli autori (nella stessa riga)
    non mi fa postare le tabelle, il sito cva in pappa

  4. #4
    ecco le 3 tabelle
    libro ( id_libro int(11) NOT NULL AUTO_INCREMENT,
    isbn varchar(50) NOT NULL,
    lingua varchar(50) NOT NULL,
    anno year(4) NOT NULL,
    titolo varchar(255) NOT NULL,
    casa_editrice int(11) NOT NULL,
    parole_chiave text,
    collezione varchar(50) DEFAULT NULL,
    sezione varchar(50) NOT NULL,
    scaffale varchar(10) NOT NULL,
    num_reg varchar(20) NOT NULL,
    disponibilita int(11) NOT NULL,
    PRIMARY KEY (id_libro) )



    ha_scritto (
    id_libro int(11) NOT NULL,
    id_autore int(11) NOT NULL,
    PRIMARY KEY (id_libro,id_autore)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


    autori (
    id int(11) NOT NULL AUTO_INCREMENT,
    nome varchar(50) NOT NULL,
    cognome varchar(50) NOT NULL,
    dataN date NOT NULL,
    luogoN varchar(50) NOT NULL,
    bio text NOT NULL,
    abilitato tinyint(1) NOT NULL DEFAULT '0',
    PRIMARY KEY (id)
    )

  5. #5

  6. #6
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    Spiegati meglio, scrivi il risultato che vuoi ottenere dalla query.

  7. #7
    voglio ottenere una tabella con PER OGNI RIGA

    -titolo
    -elenco TUTTI autori


    es:


    TITOLO | AUTORI
    I promessi sposi | alessandro Manzoni, altro autore, altro aotore2 .... |



    spero di essere stato più chiaro

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    27
    Se hai fretta e vuoi provare da solo, secondo me dovresti usare la funzione di aggregazione group_concat() di mysql sul join tra le tre tabelle group by l'ID del libro.

    Questa è la documentazione

    http://dev.mysql.com/doc/refman/5.0/...n_group-concat

    Prima di postare del codice dovrei provarlo, non so se con le join che ho in mente funziona, per cui se non arriva qualcuno prima di me con la query pronta, non ti resta che provare.

    Ciao

  9. #9
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    Esattamente devi utilizzare la funzione citata sopra:

    codice:
    SELECT titolo, 
    GROUP_CONCAT(nome SEPARATOR ', ') AS autori 
    FROM libro, autori, ha_scritto 
    WHERE autori.id = ha_scritto.id_autore 
    AND libro.id_libro = ha_scritto.id_libro 
    GROUP BY libro.id_libro

  10. #10
    grazie mille, ora è propio come volevo.
    Solo un'ultima cosa (non ho capito come fare),

    se io voglio avere nome e cognome degli autori separati da spazio, come faccio?

    riesco a restituirli entrambi, ma non capisco come metterci lo spazio

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.