Как я могу получить данные дочерней таблицы из основной таблицы в виде строкового значения

0

Это структура главной таблицы

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

  • 0
    Какова схема таблицы gf_film_poster?
  • 0
    Я добавил это к своему вопросу ...
Показать ещё 2 комментария
Теги:

1 ответ

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
    Спасибо, этот запрос дает мне идеальный результат, что мне нужно.
  • 0
    Вы добавляете group_concat к моему запросу, чтобы вы могли сказать мне, что мой запрос правильно оптимизирован или нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню