Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос / 13 сообщений из 13, страница 1 из 1
22.04.2015, 09:39:36
    #38942151
amf1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
есть таблица в БД "kino"
2 поля: название фильма "title" и актер играющий роль "actor"
нужно выбрать все фильмы где играют роль определенные 2 актера вместе
вот мой запрос, он конечно не работает(
SELECT `title` FROM `kino` WHERE `actor`="Вася" AND `actor`="Петя"
помогите исправить запрос?
...
Рейтинг: 0 / 0
22.04.2015, 10:01:51
    #38942177
Помогите написать запрос
Код: sql
1.
2.
3.
4.
5.
6.
DROP TABLE IF EXISTS "kino";
CREATE TABLE "kino" ("id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , "title" TEXT NOT NULL , "actor" TEXT NOT NULL );
INSERT INTO "kino" VALUES(1,'firstKino','firstActor');
INSERT INTO "kino" VALUES(2,'firstKino','secondActor');
INSERT INTO "kino" VALUES(3,'secondKino','secondActor');
INSERT INTO "kino" VALUES(4,'thirdKino','firstActor');



Код: sql
1.
2.
3.
4.
SELECT title, count(title) AS count FROM kino
WHERE actor = 'firstActor' OR actor = 'secondActor'
GROUP BY title
HAVING count > 1
...
Рейтинг: 0 / 0
22.04.2015, 10:11:25
    #38942197
Помогите написать запрос
гыыы... навсякий! ;)
Код: sql
1.
2.
3.
4.
5.
SELECT title, group_concat(actor) actors 
FROM kino
WHERE actor = 'firstActor' OR actor = 'secondActor'
GROUP BY title
HAVING count(*) > 1
...
Рейтинг: 0 / 0
22.04.2015, 11:30:03
    #38942307
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
не нужно! переделай структуру пока не поздно

Таблица 1: film(id, title,.. прочая лабуда типа даты выхода, кассовых сборов итд итп)
Таблица 2: actor(id,name, прочая лабуда типа возраст, сексуальные предпочтения итд итп)
Таблица 3: actorinfilm (id, id_film, id_actor)

Код: sql
1.
2.
3.
4.
5.
SELECT f.title, ... FROM film AS f
INNER JOIN actorinfilm AS aif ON f.id = aif.id_film
WHERE aif.id_actor IN (<id_actor1>, <id_actor2>)
GROUP BY aif.id_film
HAVING count(*) > 1



Модератор: Тема перенесена из форума "PHP, Perl, Python".
...
Рейтинг: 0 / 0
22.04.2015, 12:44:18
    #38942433
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
я тоже напишу (для веб-приложения) :-)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
CREATE TABLE kino 
( 
    MovieName VARCHAR(50) NOT NULL, 
    Actor VARCHAR(50) NOT NULL, 
    PRIMARY KEY (MovieName, Actor), 
    INDEX ( MovieName(20) ), 
    INDEX ( Actor(20) )
) ENGINE InnoDB;


INSERT INTO kino 
(MovieName, Actor)
VALUES
("Movie01", "Actor01"),
("Movie02", "Actor01"),
("Movie03", "Actor01"),
("Movie04", "Actor02"),
("Movie05", "Actor03"),
("Movie01", "Actor02"),
("Movie02", "Actor03"),
("Movie02", "Actor02"),
("Movie04", "Actor04")
;

SELECT t1.MovieName, t1.Actor, t2.Actor, t3.Actor
FROM kino t1, kino t2, kino t3
WHERE t1.MovieName = t2.MovieName AND t1.MovieName=t3.MovieName AND 
      t1.Actor='Actor01' AND t2.Actor='Actor02' AND t3.Actor='Actor03';
...
Рейтинг: 0 / 0
22.04.2015, 12:45:12
    #38942435
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
amf1kесть таблица в БД "kino"
2 поля: название фильма "title" и актер играющий роль "actor"
нужно выбрать все фильмы где играют роль определенные 2 актера вместе
вот мой запрос, он конечно не работает(
SELECT `title` FROM `kino` WHERE `actor`="Вася" AND `actor`="Петя"
помогите исправить запрос?

Тебе надо сначала свою БД исправить, нормализацию произвести.
...
Рейтинг: 0 / 0
22.04.2015, 12:58:01
    #38942454
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
mini.weblab,

а если будет 5-10 актеров? будете "джоинить" таблицу 10 раз? А если у фильмов одинаковое название, у вас там первичный ключ висит?
...
Рейтинг: 0 / 0
22.04.2015, 13:37:36
    #38942518
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
SharuPoNemnogu,

1) ключ (movie name, actor), т.е. уникальна запись фильм + актер: фильмы с одинаковым названием записывать можно,
но дублирующая запись фильм+актер не пройдет
2) джоины использовала потому что группировка уже была :-)
...
Рейтинг: 0 / 0
22.04.2015, 13:49:15
    #38942536
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
и еще оч. хотелось написать денормализацию, а как ее без джоинов напишешь?
...
Рейтинг: 0 / 0
24.04.2015, 18:39:04
    #38944931
amf1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
как-то так...,
спасибо большое) а если у меня будут одинаковые название фильма, тогда ведь запрос будет некорректен?
...
Рейтинг: 0 / 0
24.04.2015, 20:20:05
    #38945007
amf1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
mini.weblab,
Пример:

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 фильма: "Злодей","Герой"
...
Рейтинг: 0 / 0
24.04.2015, 20:24:29
    #38945008
amf1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
извини, маленькая поправка, там вместо первых 4 фильмов Герой фильмы Злодей
...
Рейтинг: 0 / 0
25.04.2015, 00:22:56
    #38945087
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
amf1k,
1) сначала нужно определиться с данными: если в таблице два столбца(фильм, актер), то записи различаются только по этим двум признакам. Если такая таблица устраивает, то

2) создаем ключ(фильм, актер), чтобы избежать дубликатов (реляционная таблица)

3) Допустим мы узнаем, что есть разные фильмы с одним и тем же названием, и нам нужно выводить информацию отдельно по каждому фильму. т.е. получается, что начальная таблица не решает поставленную задачу. Что можно сделать? Можно добавить столбец фильм_идентити (с уникальным идентификатором фильма). Новая таблица: (фильм_идентити, фильм, актер)

4) Дальше мы узнаем, что у нас два актера Пети Иванова. Что делать? Создаем дополнительный столбец (актер_идентити)
Опять же новая реляционная таблица: (фильм_идентити, фильм, актер_идентити, актер)

5) когда все ясно с таблицей, можно переходить к рассмотрению предложения SharuPoNemnogu о нормализации (иначе говоря, мы должны решить как же нам хранить наши данные)

6) когда мы окончательно определились со структурой хранения данных, можно начинать писать запросы
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]