Это структура главной таблицы
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 ;
Это дочерняя таблица, через которую я сопоставляю между приведенной выше таблицей gf_film и самой низкой таблицей gf_actor
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;
Эта другая таблица, из которой мне нужно повторно присвоить имя актера
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 ;
И это схема для 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;
После выполнения этого запроса
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
Я получаю эти результаты из базы данных
film_id,film_name,date,month_ori,month,year,film_release_date,
film_feature,film_modify,film_post_link,website_poster_url
Мне нужен другой столбец, который содержит имя актера и actor_id в одной строке, относящейся к каждому фильму, путем объединения вышеуказанного запроса с gf_actor и gf_film_actor
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