сложно несочиненный запрос.

sickboy

Новичок
сложно несочиненный запрос.

Hi

имеется вот такая таблица:
+----------------+--------------------+------------+--------------+
| id_moviez | genre | genre2 | genre3 |
+----------------+--------------------+------------+--------------+
| 1 | мистика | ужос | |
| 2 | ужос | | |
| 3 | ужос | | |
| 4 | фантастика | комедия | приключения |
+----------------+---------------------+-------------+-------------+

нужно составить запрос, который вернет количество фильмов в каждом жанре

т.е.
genre | count
----------------+----------
ужос | 3
мистика | 1
комедия | 1
...
и т.д
что-то никак не соображу как это сделать.
Гуру нужна ваша помощь.
 

Фанат

oncle terrible
Команда форума
для начала удали из такой таблицы поля genre2 и genre3
 

Serguitar

Новичок->продвинутый
sickboy
На роль гуру не претендую, но помочь попробую.
Сначала создай таблицу Жанры.
Genres
id | genre_name

Затем, при добавлении записи в свою таблицу, уже исправленную по совету Фаната, (надеюсь, теперь она имеет вид
id | genre_id | ...... )

И делаешь запрос...))
 

alpine

Новичок
Я бы делал так:
films
----
films_id | title | ...

films2genre
---
films_id | genre_id

genre
---
genre_id | genre

Запрос
---
SELECT g.genre ,count(f.films_id) as 'count'
FROM films as f
LEFT JOIN films2genre as fg ON f.films_id = fg.films_id
LEFT JOIN genre as g ON fg.genre_id = g.genre_id
GROP BY g.genre_id
 

Фанат

oncle terrible
Команда форума
а нафига тут две таблицы на жанры?
и два джойна?
жанры - это простой справочник.
нафига плодить бессмысленные сущности?
 

Serguitar

Новичок->продвинутый
Фанат
Почему удалил мое сообщение про справочники? Ведь ещё два сообщения назад ты не понимал зачем нужен справочник и спрашивал про ещё одну таблицу?
 

alpine

Новичок
Фанат
Считаю что удобно работать с такой структурой.
Кстати можно обойтись одним джоином.
SELECT g.genre ,count(fg.films_id) as 'count'
FROM films2genre as fg
INNER JOIN genre as g USING(genre_id)
GROP BY g.genre_id
 

sickboy

Новичок
Спасибо всем за ответы.
Остановился на таком варианте:
moviez:
id_moviez | id_genre

genres:
id_moviez | genre

Код:
select genres.genre, count(moviez.id_moviez)
as count from moviez left join genres on genres.id_moviez=moviez.id_moviez
group by genre order by genre;
 

Steamroller

Новичок
А зачем ты для подсчета в таблицу moviez идешь?
Тут же просто достаточно
select genre, count(id_moviez) from genres group by genre;
 
Сверху