Visualizzazione dei risultati da 1 a 5 su 5

Discussione: problema con una query

  1. #1

    problema con una query

    Ho un problema con la seguente query:
    Codice PHP:
    $query "SELECT c.id as id,c.titolo as titolo,c.anno as anno,
                caut.id_musicisti as id_autori,
                cmus.id_musicisti as id_musicisti,
                cet.id_etichette as id_etichette,
                cgen.id_generi as id_generi,
                    aut.musicista as autori,
                    mus.musicista as musicisti,
                    et.etichetta as etichette,
                    gen.genere as generi
            FROM cd c 
            JOIN cd_musicisti_autori caut ON caut.id_cd=c.id
            JOIN cd_musicisti cmus ON cmus.id_cd=c.id
            JOIN cd_etichette cet ON cet.id_cd=c.id
            JOIN cd_generi cgen ON cgen.id_cd=c.id
            LEFT JOIN musicisti aut ON aut.id=caut.id_musicisti
            LEFT JOIN musicisti mus ON mus.id=cmus.id_musicisti
            LEFT JOIN etichette et ON et.id=cet.id_etichette
            LEFT JOIN generi gen ON gen.id=cgen.id_generi
            WHERE c.id='"
    .$_SESSION['id_cd']."'";
    $result mysql_query($query$conn) or die(mysql_error() . ":
    $query);
    $rows mysql_fetch_array($result);
    echo 
    "<pre>";
    print_r($rows);
    echo 
    "</pre>"
    Il problema è che id_autori, id_musicisti ed altri dovrebbero essere array a loro volta e non fermarsi al primo risultato. E' possibile fare ciò con una singola query?

  2. #2
    si ferma al primo risultato perche' chiedi solo il primo risultato.

    codice:
    ......
    echo "<pre>";
    while($rows = mysql_fetch_assoc($result) ) {
    print_r($rows);
    }
    echo "</pre>";
    mysql_fetch_assoc() altrimenti ti li stampera' doppi cioe' sia con indice numerico che con indice associativo.

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

  3. #3
    Così mi crea più risultati per un solo album perchè itera tutti i valori che possono essere associati a quell'album.
    Per esempio io ho inserito
    titolo=Tribute to John Coltrane 'A Love Supreme'
    anno=1992
    autori=Jones Elvin
    musicisti=Jones Elvin, Marsalis Wynton, Veal Reginald, Roberts Marcus
    etichette=********
    generi=jazz, blues

    ed il risultato è stato:

    Array
    (
    [id] => 1
    [titolo] => Tribute to John Coltrane 'A Love Supreme'
    [anno] => 1992
    [id_autori] => 1
    [id_musicisti] => 1
    [id_etichette] => 1
    [id_generi] => 2
    [autori] => Jones Elvin
    [musicisti] => Jones Elvin
    [etichette] => ********
    [generi] => blues
    )
    Array
    (
    [id] => 1
    [titolo] => Tribute to John Coltrane 'A Love Supreme'
    [anno] => 1992
    [id_autori] => 1
    [id_musicisti] => 1
    [id_etichette] => 1
    [id_generi] => 1
    [autori] => Jones Elvin
    [musicisti] => Jones Elvin
    [etichette] => ********
    [generi] => jazz
    )
    Array
    (
    [id] => 1
    [titolo] => Tribute to John Coltrane 'A Love Supreme'
    [anno] => 1992
    [id_autori] => 1
    [id_musicisti] => 2
    [id_etichette] => 1
    [id_generi] => 2
    [autori] => Jones Elvin
    [musicisti] => Marsalis Wynton
    [etichette] => ********
    [generi] => blues
    )
    Array
    (
    [id] => 1
    [titolo] => Tribute to John Coltrane 'A Love Supreme'
    [anno] => 1992
    [id_autori] => 1
    [id_musicisti] => 2
    [id_etichette] => 1
    [id_generi] => 1
    [autori] => Jones Elvin
    [musicisti] => Marsalis Wynton
    [etichette] => ********
    [generi] => jazz
    )
    Array
    (
    [id] => 1
    [titolo] => Tribute to John Coltrane 'A Love Supreme'
    [anno] => 1992
    [id_autori] => 1
    [id_musicisti] => 3
    [id_etichette] => 1
    [id_generi] => 2
    [autori] => Jones Elvin
    [musicisti] => Reginald Veal
    [etichette] => ********
    [generi] => blues
    )
    Array
    (
    [id] => 1
    [titolo] => Tribute to John Coltrane 'A Love Supreme'
    [anno] => 1992
    [id_autori] => 1
    [id_musicisti] => 3
    [id_etichette] => 1
    [id_generi] => 1
    [autori] => Jones Elvin
    [musicisti] => Reginald Veal
    [etichette] => ********
    [generi] => jazz
    )
    Array
    (
    [id] => 1
    [titolo] => Tribute to John Coltrane 'A Love Supreme'
    [anno] => 1992
    [id_autori] => 1
    [id_musicisti] => 4
    [id_etichette] => 1
    [id_generi] => 2
    [autori] => Jones Elvin
    [musicisti] => Roberts Marcus
    [etichette] => ********
    [generi] => blues
    )
    Array
    (
    [id] => 1
    [titolo] => Tribute to John Coltrane 'A Love Supreme'
    [anno] => 1992
    [id_autori] => 1
    [id_musicisti] => 4
    [id_etichette] => 1
    [id_generi] => 1
    [autori] => Jones Elvin
    [musicisti] => Roberts Marcus
    [etichette] => ********
    [generi] => jazz
    )

    La struttura del database si dovrebbe capire dalla query del primo messaggio, se non si capisce la riporto qua.

  4. #4
    boh! che si capisca proprio non e' detto. Anche perche' credo che in pochi si siano messi a tracciare la struttura del db in base ad una query.

    Si suppone che la tua query sia un po' contorta ed il db con errori. Rende tutto quello che gli chiedi e che lui trova soddisfare la tua richiesta.

    Es.: come puo' lo stesso titolo trovarsi con lo stesso id sia come genere blues e come jazz ? ...

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

  5. #5
    A costo di allungare il post riporto la struttura.
    E' ovvio che è un sistema per catalogare i miei cd e non è detto che finisca in rete.

    Codice PHP:
    -- Struttura della tabella `cd`
    --

    CREATE TABLE IF NOT EXISTS `cd` (
      `
    idint(11NOT NULL auto_increment,
      `
    titolovarchar(255NOT NULL,
      `
    annoyear(4NOT NULL,
      `
    data_registrazionedate NOT NULL,
      `
    prestitovarchar(255) default NULL,
      
    PRIMARY KEY  (`id`)
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `cd_etichette`
    --

    CREATE TABLE IF NOT EXISTS `cd_etichette` (
      `
    idint(11NOT NULL auto_increment,
      `
    id_cdint(11NOT NULL,
      `
    id_etichetteint(11NOT NULL,
      
    PRIMARY KEY  (`id`)
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `cd_generi`
    --

    CREATE TABLE IF NOT EXISTS `cd_generi` (
      `
    idint(11NOT NULL auto_increment,
      `
    id_cdint(11NOT NULL,
      `
    id_generiint(11NOT NULL,
      
    PRIMARY KEY  (`id`)
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `cd_musicisti`
    --

    CREATE TABLE IF NOT EXISTS `cd_musicisti` (
      `
    idint(11NOT NULL auto_increment,
      `
    id_cdint(11NOT NULL,
      `
    id_musicistiint(11NOT NULL,
      
    PRIMARY KEY  (`id`)
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `cd_musicisti_autori`
    --

    CREATE TABLE IF NOT EXISTS `cd_musicisti_autori` (
      `
    idint(11NOT NULL auto_increment,
      `
    id_cdint(11NOT NULL,
      `
    id_musicistiint(11NOT NULL,
      
    PRIMARY KEY  (`id`)
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `cd_musicisti_strumenti`
    --

    CREATE TABLE IF NOT EXISTS `cd_musicisti_strumenti` (
      `
    idint(11NOT NULL auto_increment,
      `
    id_cdint(11NOT NULL,
      `
    id_musicisti_strumentiint(11NOT NULL,
      
    PRIMARY KEY  (`id`)
    ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `cd_tracce`
    --

    CREATE TABLE IF NOT EXISTS `cd_tracce` (
      `
    idint(11NOT NULL auto_increment,
      `
    id_cdint(11NOT NULL,
      `
    numero_tracciaint(3NOT NULL,
      `
    tracciavarchar(255NOT NULL,
      
    PRIMARY KEY  (`id`)
    ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `etichette`
    --

    CREATE TABLE IF NOT EXISTS `etichette` (
      `
    idint(11NOT NULL auto_increment,
      `
    etichettavarchar(255NOT NULL,
      
    PRIMARY KEY  (`id`),
      
    UNIQUE KEY `etichetta` (`etichetta`)
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `generi`
    --

    CREATE TABLE IF NOT EXISTS `generi` (
      `
    idint(11NOT NULL auto_increment,
      `
    generevarchar(255NOT NULL,
      
    PRIMARY KEY  (`id`),
      
    UNIQUE KEY `genere` (`genere`)
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `musicisti`
    --

    CREATE TABLE IF NOT EXISTS `musicisti` (
      `
    idint(11NOT NULL auto_increment,
      `
    musicistavarchar(255NOT NULL,
      
    PRIMARY KEY  (`id`),
      
    UNIQUE KEY `musicista` (`musicista`)
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `musicisti_strumenti`
    --

    CREATE TABLE IF NOT EXISTS `musicisti_strumenti` (
      `
    idint(11NOT NULL auto_increment,
      `
    id_musicistiint(11NOT NULL,
      `
    id_strumentiint(11NOT NULL,
      
    PRIMARY KEY  (`id`)
    ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    -- --------------------------------------------------------

    --
    -- 
    Struttura della tabella `strumenti`
    --

    CREATE TABLE IF NOT EXISTS `strumenti` (
      `
    idint(11NOT NULL auto_increment,
      `
    strumentovarchar(255NOT NULL,
      
    PRIMARY KEY  (`id`),
      
    UNIQUE KEY `strumento` (`strumento`)
    ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=
    Ho pensato ad una struttura che mi permettesse di associare al singolo titolo diversi valori per l'autore, per i musicisti, per l'etichetta e per il genere, perchè i casi sono innumerevoli ed associare due generi allo stesso cd può essere necessario. Inoltre ad ogni musicista mi deve permettere di associare gli strumenti suonati e personalizzarli per ogni cd, quindi se Elvin Jones è batterista in un cd può essere sia batterista che pianista in un altro cd. Il tutto deve potersi scegliere da elenchi di selezione multipli per evitarmi ogni volta di riscrivere le stesse cose. Ho cercato anche di suddivedere in molte tabelle, di cui alcune di collegamento, in modo che la struttura possa essere espansibile.

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.