2010-09-29 7 views
0

C'est la structure de la table principalecomment puis-je récupérer les données de la table des enfants de la table maître dans une valeur de chaîne

CREATE TABLE IF NOT EXISTS `gf_film` (

    `film_id` bigint(20) NOT NULL AUTO_INCREMENT, 

    `user_id` int(20) NOT NULL, 

    `film_name` varchar(100) DEFAULT NULL, 

    `film_cat` varchar(30) CHARACTER SET latin1 DEFAULT NULL, 

    `film_plot` longtext, 

    `film_release_date` date DEFAULT NULL, 

    `film_post_date` date DEFAULT NULL, 

    `film_type` enum('Movie','Tv') CHARACTER SET latin1 DEFAULT 'Movie', 

    `film_feature` enum('Y','N') CHARACTER SET latin1 NOT NULL DEFAULT 'N', 

    `film_status` enum('ACTIVE','INACTIVE') CHARACTER SET latin1 NOT NULL DEFAULT 'ACTIVE', 

    `film_modify` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 

    `film_link_value` varchar(200) NOT NULL, 

    `film_post_link` varchar(255) NOT NULL, 

    PRIMARY KEY (`film_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=21435 ; 

Ce tableau de l'enfant à travers lequel je la carte entre la table gf_film ci-dessus et le plus bas gf_actor Table

CREATE TABLE IF NOT EXISTS `gf_film_actor` (

    `film_id` int(20) NOT NULL, 

    `actor_id` int(20) NOT NULL, 

    KEY `film_id` (`film_id`) 

) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

Cette autre table à partir de laquelle je dois reitrieve le nom de l'acteur

CREATE TABLE IF NOT EXISTS `gf_actor` (

    `actor_id` bigint(20) NOT NULL AUTO_INCREMENT, 

    `actor_name` varchar(100) DEFAULT NULL, 

    `actor_desc` longtext CHARACTER SET latin1, 

    PRIMARY KEY (`actor_id`), 

    UNIQUE KEY `actor_name` (`actor_name`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=60963 ; 

Et ce schéma pour gf_film_poster

CREATE TABLE IF NOT EXISTS `gf_film_poster` (

    `film_id` int(20) NOT NULL, 

    `website_poster_url` varchar(255) DEFAULT NULL, 

    `original_poster_url` varchar(255) DEFAULT NULL, 

    `default_poster_url` varchar(255) DEFAULT 'noposter.gif', 

    UNIQUE KEY `film_id` (`film_id`) 

) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

Après l'exécution de cette requête

SELECT gf_film.film_id         , 
     film_name          , 
     DATE_FORMAT(film_release_date,'%d') AS DATE  , 
     DATE_FORMAT(film_release_date,'%m') AS month_ori, 
     DATE_FORMAT(film_release_date,'%M') AS MONTH , 
     DATE_FORMAT(film_release_date,'%Y') AS YEAR  , 
     film_release_date        , 
     film_feature         , 
     film_modify          , 
     film_post_link         , 
     website_poster_url 
FROM gf_film 
     LEFT JOIN gf_film_poster 
     ON  gf_film.film_id=gf_film_poster.film_id 

Je reçois ces résultats de base de données

film_id,film_name,date,month_ori,month,year,film_release_date, 
film_feature,film_modify,film_post_link,website_poster_url 

donc j'ai besoin l'autre colonne qui contient le nom des acteurs et actor_id dans une ligne liées à chaque films par joing la requête ci-dessus avec gf_actor et gf_film_actor

+0

Quel est le schéma de la table de gf_film_poster? –

+0

Je l'ai ajouté à ma question ... – pravat231

+0

est-ce un acteur par film? Si ce n'est pas le cas, voulez-vous qu'un acteur par ligne soit retourné, avec d'autres champs dupliqués, ou tous les acteurs sur une ligne d'une manière ou d'une autre? –

Répondre

1
SELECT gf_film.film_id         , 
     film_name          , 
     DATE_FORMAT(film_release_date,'%d') AS DATE  , 
     DATE_FORMAT(film_release_date,'%m') AS month_ori, 
     DATE_FORMAT(film_release_date,'%M') AS MONTH , 
     DATE_FORMAT(film_release_date,'%Y') AS YEAR  , 
     film_release_date        , 
     film_feature         , 
     film_modify          , 
     film_post_link         , 
     website_poster_url        , 
     group_concat(gf_actor.actor_name) AS actors 
FROM  gf_film 
     LEFT JOIN gf_film_poster 
     ON  gf_film.film_id=gf_film_poster.film_id 
     LEFT JOIN gf_film_actor 
     ON  gf_film_actor.film_id = gf_film.film_id 
     LEFT JOIN gf_actor 
     ON  gf_film_actor.actor_id = gf_actor.actor_id 
GROUP BY gf_film.film_id 
+0

Thanx cette requête me donne un résultat parfait ce dont j'ai besoin. – pravat231

+0

Vous ajoutez le group_concat à ma requête afin que vous puissiez me dire si ma requête est correctement optimisée ou non. – pravat231

Questions connexes