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

    Incrocio di tabelle complesso

    Mi trovo in difficoltà con un incrocio un po complesso di tabella.

    Ho 3 tabelle :

    codice:
    CREATE TABLE `attore ` (
      `id` int(11) NOT NULL auto_increment,
      `nome` varchar(255) NOT NULL default '',
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=1 ;
    
    CREATE TABLE `film ` (
      `id` int(11) NOT NULL auto_increment,
      `titolo` varchar(255) NOT NULL default '',
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=1 ;
    
    CREATE TABLE `cast ` (
      `id` int(11) NOT NULL auto_increment,
      `nome` varchar(255) NOT NULL default '',
      `personaggio` varchar(255) NOT NULL default '',
      `id_film` int(11) NOT NULL default '0',
      `id_attore` int(11) NOT NULL default '0',
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=3 ;
    Esempio:

    La pagina "scheda_attore.php" stampa il contenuto della tabella attore e sotto vorrei che mi stampasse l'elenco dei suoi film. Per fare questo ho pensato di creare la tabella cast che dovrebbe fare un po da perno tra attore e film.

    L'incrocio che mi servirebbe è questo:

    1) Vorrei che l'id della tabella attore fosse confrontato con l'id_attore della tabella cast (fin qui tutto ok, ci sono riuscito con :
    codice:
    $sql="SELECT * FROM cast INNER JOIN attore ON cast.id_attore = attore.id WHERE cast.id_attore = '$id'";
    2) Vorrei far stampare al sistema il "titolo" della tabella film dove il suo ID corrisponde all'Id_film della tabella cast solo nei record che hanno soddisfatto la richiesta del punto 1

    Id (attore) = Id_attore (cast)--Id_film (cast) = Id (film)

    E' possibile ?

  2. #2
    Ma in questo caso la tabella cast ha una ripetizione, il campo ID_ATTORE è già compreso nel campo ID della tabella cast.
    Xkè per come l'hai costruita tu, non avrai mai una ripetizione di tupla con stesso id_attore stesso id_film e stesso nome personaggio, quindi xkè lo usi?

  3. #3
    Io se fossi in te fare la tabella CAST così:

    ID_ATTORE, ID_FILM e basta!! Perchè poi i nomi li prendi dalle rispettive tabelle!

    Nella scheda_attore farai una semplice JOIN così:

    SELECT titolo FROM cast JOIN film WHERE cast.ID_ATTORE='$id' AND film.ID=cast.ID_FILM;

  4. #4
    Hai ragione riguardo i campi in più. In effetti potrei eliminarli.
    Per quanto riguarda la tua riga, funziona benissimo.

    Grazie un sacco.


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.