Помогите написать запрос

KotOFF

Новичок
есть таблица в БД "kino"
2 поля: название фильма "title" и актер играющий роль "actor"
нужно выбрать все фильмы где играют роль определенные 2 актера вместе
вот мой запрос, он конечно не работает(
SELECT `title` FROM `kino` WHERE `actor`="Вася" AND `actor`="Петя"
помогите исправить запрос?
 

Hello

Новичок
Код:
SELECT k1.`title` FROM `kino` k1
JOIN `kino` k2 ON k1.title = k2.title
WHERE (k1.`actor`="Вася" AND k2.`actor`="Петя")
 

KotOFF

Новичок
Спасибо большое) а если у меня будут одинаковые название фильма, тогда ведь запрос будет некорректен?
 

KotOFF

Новичок
Код:
SELECT k1.`title` FROM `kino` k1
JOIN `kino` k2 ON k1.title = k2.title
WHERE (k1.`actor`="Вася" AND k2.`actor`="Петя")
Пример:

id - 1
movie - Злодей
actor - Даша

id - 2
movie - Злодей
actor - Вася

id - 3
movie - Злодей (Это уже другой фильм "Злодей")
actor - Вася

id - 4
movie - Злодей (Это уже другой фильм "Злодей")
actor - Катя

id - 5
movie - Санта Барбара
actor - Даша

id - 6
movie - Санта Барбара
actor - Вася

id - 7
movie - Злодей
actor - Петя

id - 8
movie - Герой
actor - Петя

id - 9
movie - Герой
actor - Вася

итог 4 фильма:
Фильм "Злодей": актеры - Даша,Вася,Петя
Фильм "Злодей другой фильм": актеры - Вася,Катя
Фильм "Санта Барбара": актеры - Даша,Вася
Фильм "Герой": актеры - Петя,Вася

например нужно вытащить фильмы Васи и Пети, где они играли роль вмете
получаем 2 фильма: "Злодей","Герой"
 

AnrDaemon

Продвинутый новичок
Тогда ты будешь объединять не по названию, а по какому-нибудь другому полю, которое идентифицирует фильм однозначно.
 

KotOFF

Новичок
Тогда ты будешь объединять не по названию, а по какому-нибудь другому полю, которое идентифицирует фильм однозначно.
я уже подумываю записывать фильмы в таком виде:
Злодей (2004)
Злодей (2015)
Тогда такой проблемы не будет
 

AnrDaemon

Продвинутый новичок
Надеюсь, ты понимаешь, что название фильма и год выхода - это два аттрибута, и писать их в одно поле - глупо?
 

Andkorol

Новичок
Лучше прислушайся к AnrDaemon – используй уникальный идентификатор фильма, вместо неуникального названия.
Сделай 3 таблицы:
Фильмы
Актеры
Фильмы_Актеры – связующая таблица, примерно то же, что сейчас есть у тебя, но только содержит уникальные идентификаторы Фильмов и Актеров, вместо Вась-Злодеев.
 

AnrDaemon

Продвинутый новичок
Что поделать - тебе уже сказали. Правильно создавать БД.
 

KotOFF

Новичок
Что поделать - тебе уже сказали. Правильно создавать БД.
Связывать проще будет название фильма и имя актера, чем id фильма и id актера, ведь для этого не нужно искать под каким id фильм и под каким id актер, ведь я прав?) PS. структура таблиц у меня продумана заранее, короче вот мой вариант запроса:
PHP:
SELECT `movie` FROM `roles` WHERE `movie` IN(
    SELECT `movie` FROM `roles` WHERE `actor`="Вася"
) AND `actor`="Петя"
 

AnrDaemon

Продвинутый новичок
Связывать проще будет название фильма и имя актера, чем id фильма и id актера, ведь для этого не нужно искать под каким id фильм и под каким id актер, ведь я прав?) PS. структура таблиц у меня продумана заранее, короче вот мой вариант запроса:
PHP:
SELECT `movie` FROM `roles` WHERE `movie` IN(
    SELECT `movie` FROM `roles` WHERE `actor`="Вася"
) AND `actor`="Петя"
Может, я не гений программирования, но построению баз данных меня конкретно учили.
Кроме того, компьютеру сравнивать числа проще, чем строки.
Так что нормально(во всех смыслах) построенная БД будет работать заведомо быстрее… того, что у тебя есть сейчас. (Пробегавший мимо зверёк пожаловался, что его постоянно поминают всуе, так что свою мысль я на этом закончу.)
 

WMix

герр M:)ller
Партнер клуба
иногда некоторые данные не имеют значения, тк они не являются частью программы. (киностудия, тип носителя, битрейт, кодек, хз другое) к примеру если не будешь оперировать с годом для выдачи фильмов только 1995 года, или построения видеографии каждого актера, то можно год запихнуть в название. но не для уникальности, а для описания. для уникальности достаточно присвоить уникальный номер.
 

Sufir

Я не волшебник, я только учусь
я уже подумываю записывать фильмы в таком виде:
Злодей (2004)
Злодей (2015)
Тогда такой проблемы не будет
А что с этим будешь делать: Борджиа (2011): http://www.kinopoisk.ru/film/573312/ http://www.kinopoisk.ru/film/521722/
или с этим Заклятие (2013): http://www.kinopoisk.ru/film/807293/ http://www.kinopoisk.ru/film/468994/

Такой формат тоже не обеспечивает уникальности. Можешь википедию глянуть (стандарт именования статей о фильмах). Там к году добавляется страна, если у фильмов совпадают и годы, а в редких но существующих случаях, когда совпадает и страна, добавляют ещё и режиссера.

Хорош фантазировать. Есть общепринятые принципы и они стали таковыми не просто так. Для уникальной идентификации двух различных сущностей, обладающих одинаковыми свойствами, просто нужно использовать уникальные идентификаторы.
 
Сверху