Задавайте вопросы, мы ответим
Вы не зашли.
Уважаемые коллеги, нуждаюсь в вашей помощи, помогите пожалуйста.
Есть 2 таблицы:
films:
id | title_ru | title_en | year | description | time | url
films_peoples_careers
id_film | id_people | career
Есть запрос:
SELECT
f.title_ru,
f.title_en,
f.time,
f.year,
f.description,
GROUP_CONCAT(DISTINCT p.name_ru) AS peoples,
GROUP_CONCAT(DISTINCT g.title) AS genres
FROM films f
LEFT JOIN films_peoples_careers fpc ON f.id = fpc.id_film
LEFT JOIN peoples p ON p.id = fpc.id_people
LEFT JOIN films_genres fg ON f.id = fg.id_film
LEFT JOIN genres g ON g.id = fg.id_genre
GROUP BY f.id
ORDER BY year DESC LIMIT 5
Результат запроса
как сделать через php чтобы актеры и режиссеры записывались отдельно?
У меня вывод щас выглядит примерно так:
Название фильма (год)
Актеры: актер 2,режиссер 1,режиссер 2
Режиссеры: актер 2,режиссер 1,режиссер 2
Описание: описание
А нужно что бы выводил так:
Название фильма (год)
Актеры: актер 2
Режиссеры: режиссер 1,режиссер 2
Описание: описание
Направьте на путь истинный пожалуйста, если гдето чтото не понятно, распишу подробнее. Заранее огромное спасибо.
Отредактированно pagal (04.11.2011 17:53:52)
Неактивен
А как вообще по данным в таблице отличить актеров от режиссеров?
Неактивен
по колонке career в таблице films_peoples_careers, тоесть:
id_film | id_people | career
1 1 актер
1 2 режиссер
Неактивен
также есть таблица people, в которой перечислены все актеры и режиссеры, и по таблице films_peoples_careers уже идет сопоставление id кто в каком фильме кем является
Неактивен
вместо
LEFT JOIN films_peoples_careers fpc ON f.id = fpc.id_film
нужно
LEFT JOIN (select id_people from films_peoples_careers where career='актер') fpc ON f.id = fpc.id_film
LEFT JOIN (select id_people from films_peoples_careers where career='режиссер') fpc1 ON f.id = fpc1.id_film
Неактивен
Я думаю, экономичнее разобрать будет уже в PHP, пройдясь циклом по строкам и записывая соответствующую строку в нужный массив.
Неактивен
вот на такой запрос:
SELECT
f.title_ru,
f.title_en,
f.time,
f.year,
f.description,
GROUP_CONCAT(DISTINCT p.name_ru) AS peoples,
GROUP_CONCAT(DISTINCT g.title) AS genres
FROM films f
LEFT JOIN (select id_people from films_peoples_careers where career='актер') fpc ON f.id = fpc.id_film
LEFT JOIN (select id_people from films_peoples_careers where career='режиссер') fpc1 ON f.id = fpc1.id_film
LEFT JOIN peoples p ON p.id = fpc.id_people
LEFT JOIN films_genres fg ON f.id = fg.id_film
LEFT JOIN genres g ON g.id = fg.id_genre
GROUP BY f.id
ORDER BY year DESC LIMIT 5
Выдает такую ошибку:
#1054 - Unknown column 'fpc.id_film' in 'on clause'
Отредактированно pagal (04.11.2011 23:10:56)
Неактивен
LazY написал:
Я думаю, экономичнее разобрать будет уже в PHP, пройдясь циклом по строкам и записывая соответствующую строку в нужный массив.
Вот я тоже хотела бы сделать через PHP, я думала это можно сделать через условие, тоесть сравниваем, если это актер, значит выводить тут, если это режиссер, значит выводить там, а вот как реализовать не знаю.
Отредактированно pagal (04.11.2011 23:16:00)
Неактивен
Сделала запрос так:
SELECT
f.title_ru,
f.title_en,
f.time,
f.year,
f.description,
GROUP_CONCAT(DISTINCT p.name_ru) AS peoples,
GROUP_CONCAT(DISTINCT g.title) AS genres
FROM films f
LEFT JOIN (select id_people, id_film from films_peoples_careers where career='актер') fpc ON f.id = fpc.id_film
LEFT JOIN (select id_people, id_film from films_peoples_careers where career='режиссер') fpc1 ON f.id = fpc1.id_film
LEFT JOIN peoples p ON p.id = fpc.id_people
LEFT JOIN films_genres fg ON f.id = fg.id_film
LEFT JOIN genres g ON g.id = fg.id_genre
GROUP BY f.id
ORDER BY year DESC LIMIT 5
получилось ТАК, тоесть вывел только актеров, а как сделать чтоб выводил еще и режиссеров?
Неактивен
Все, спасибо, разобрались)
В итоге получился такой запрос:
SELECT
f.title_ru,
f.title_en,
f.time,
f.year,
f.description,
GROUP_CONCAT(DISTINCT p.name_ru) AS actors,
GROUP_CONCAT(DISTINCT p1.name_ru) AS directors,
GROUP_CONCAT(DISTINCT g.title) AS genres
FROM films f
LEFT JOIN (select id_people, id_film from films_peoples_careers where career='актер') fpc ON f.id = fpc.id_film
LEFT JOIN (select id_people, id_film from films_peoples_careers where career='режиссер') fpc1 ON f.id = fpc1.id_film
LEFT JOIN peoples p ON p.id = fpc.id_people
LEFT JOIN peoples p1 ON p1.id = fpc1.id_people
LEFT JOIN films_genres fg ON f.id = fg.id_film
LEFT JOIN genres g ON g.id = fg.id_genre
GROUP BY f.id
ORDER BY year DESC
Неактивен