SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.11.2011 17:52:06

pagal
Участник
Зарегистрирован: 21.03.2011
Сообщений: 16

mysql + php

Уважаемые коллеги, нуждаюсь в вашей помощи, помогите пожалуйста.

Есть 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)

Неактивен

 

#2 04.11.2011 17:58:33

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: mysql + php

А как вообще по данным в таблице отличить актеров от режиссеров?

Неактивен

 

#3 04.11.2011 19:01:12

pagal
Участник
Зарегистрирован: 21.03.2011
Сообщений: 16

Re: mysql + php

по колонке career в таблице films_peoples_careers, тоесть:

id_film | id_people | career
   1              1       актер
   1              2       режиссер

Неактивен

 

#4 04.11.2011 19:03:09

pagal
Участник
Зарегистрирован: 21.03.2011
Сообщений: 16

Re: mysql + php

также есть таблица people, в которой перечислены все актеры и режиссеры, и по таблице films_peoples_careers уже идет сопоставление id кто в каком фильме кем является

Неактивен

 

#5 04.11.2011 22:26:51

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: mysql + php

вместо
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

Неактивен

 

#6 04.11.2011 23:03:01

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: mysql + php

Я думаю, экономичнее разобрать будет уже в PHP, пройдясь циклом по строкам и записывая соответствующую строку в нужный массив.

Неактивен

 

#7 04.11.2011 23:08:14

pagal
Участник
Зарегистрирован: 21.03.2011
Сообщений: 16

Re: mysql + 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)

Неактивен

 

#8 04.11.2011 23:14:49

pagal
Участник
Зарегистрирован: 21.03.2011
Сообщений: 16

Re: mysql + php

LazY написал:

Я думаю, экономичнее разобрать будет уже в PHP, пройдясь циклом по строкам и записывая соответствующую строку в нужный массив.

Вот я тоже хотела бы сделать через PHP, я думала это можно сделать через условие, тоесть сравниваем, если это актер, значит выводить тут, если это режиссер, значит выводить там, а вот как реализовать не знаю.

Отредактированно pagal (04.11.2011 23:16:00)

Неактивен

 

#9 05.11.2011 01:28:32

pagal
Участник
Зарегистрирован: 21.03.2011
Сообщений: 16

Re: mysql + 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, 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

получилось ТАК, тоесть вывел только актеров, а как сделать чтоб выводил еще и режиссеров?

Неактивен

 

#10 05.11.2011 03:17:49

pagal
Участник
Зарегистрирован: 21.03.2011
Сообщений: 16

Re: mysql + php

Все, спасибо, разобрались)
В итоге получился такой запрос:

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson