SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 03.12.2010 23:54:55

aledain
Участник
Зарегистрирован: 09.04.2010
Сообщений: 4

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

Прошу помощи. Сам не знаю как правильно написать запрос.

Есть отношение Раздачи - Жанры, многие ко многим, реализовано через третью таблицу.

Есть главная таблица раздач files:
info_hash - ключ
и множество других полей

Есть связующая таблица содержащая идентификаторы жанров для конкретной раздачи files_genres:
id - идентификатор жанра
info_hash - идентификатор раздачи

Есть таблица жанров genreslist:
id - идентификатор жанра
name - название жанра


При поиске нужна возможность искать по жанрам указанным пользователем. Пользователь может указать несколько жанров. Сейчас реализована выборка раздач, в которых есть хотя бы один из жанров, выбранных пользователем.

На входе есть список идентификаторов жанров.

Сделано так:
LEFT JOIN files_genres ON files_genres.info_hash = f.info_hash
стандартный JOIN
и далее условие
files_genres.id IN (идентификаторы жанров через запятую)
Всё остальное специально опустил, т.к. джойнов много и условий тоже.


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

Если нужны какие-то действия с php, чтобы что-то вставлять в запрос и ещё что, то это всё можно.

Неактивен

 

#2 04.12.2010 00:22:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите с запросом поиска по жанрам

Вам нужно объединить таблицы столько раз, сколько жанров Вы ищете. Например,
SELECT ...
FROM files
JOIN files_genres fg1 ON ... JOIN genres g1 ON (fg1.id = g1.id)
JOIN files_genres fg2 ON ... JOIN genres g2 ON (fg2.id = g2.id)
WHERE
g1.name = 'foo' AND g2.name = 'bar'

Неактивен

 

#3 04.12.2010 12:41:47

aledain
Участник
Зарегистрирован: 09.04.2010
Сообщений: 4

Re: Помогите с запросом поиска по жанрам

Спасибо. Суть понял.
Такой многократный джойн будет очень медленно работать? или же не вызовет проблем производительности?

Может быть как-то не правильно спроектированы таблицы? Или всё так и должно быть?

Неактивен

 

#4 04.12.2010 14:25:12

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите с запросом поиска по жанрам

Они спроектированы так, чтобы база была нормализована. От этого варианта и нужно
всегда отталкиваться. Денормализовывать данные стоит лишь тогда, когда Вы действи-
тельно начнете упираться в производительность в этом месте.

Неактивен

 

Board footer

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