SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 07.12.2008 17:34:42

nertus
Участник
Зарегистрирован: 07.12.2008
Сообщений: 7

множественная выборка

Дорогое сообщество! Подскажите реализацию вот такой схемы:
есть таблица юзеров USERS:(id, name)
id     name
--------------
1      Nick
10    Alex
...

и таблица USER_GENRES(жанры пользователей):(id,user_id,genre_id)
в таблице жанров может содержаться от 1 до 15 жанров пользователя(пользователь на сайте выбирает любимые жанры в музыке)
т.е. например:
id       user_id    genre_id
------------------------------
1        10           22
2        10           25
3        10           40
...
т.е. уникально только id
необходимо сделать выборку одним запросом: юзера и все его жанры.
получить ответ в виде (name.users,user_genres.genre(0),user_genres.genre(1)...user_genres.genre(n))
Спасибо!

Отредактированно nertus (07.12.2008 17:40:19)

Неактивен

 

#2 07.12.2008 17:40:38

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: множественная выборка

SELECT u.id, u.name, g.genre_id FROM USERS u LEFT JOIN USER_GENRES g ON g.user_id=u.id WHERE u.id=120;

Неактивен

 

#3 07.12.2008 18:00:33

nertus
Участник
Зарегистрирован: 07.12.2008
Сообщений: 7

Re: множественная выборка

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

name.users        user_genres.genre(0)            user_genres.genre(1)            ...                    user_genres.genre(n)

Неактивен

 

#4 07.12.2008 18:13:43

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: множественная выборка

Буквально как пишете, сделать нельзя. Но можно получить все группы через запятую (или разделитель) с помощью GROUP_CONCAT.

SELECT u.id, u.name, GROUP_CONCAT(g.genre_id) FROM USERS u LEFT JOIN USER_GENRES g ON g.user_id=u.id WHERE u.id=120 GROUP BY u.id;

Неактивен

 

#5 07.12.2008 18:59:12

nertus
Участник
Зарегистрирован: 07.12.2008
Сообщений: 7

Re: множественная выборка

а если через курсоры?

Неактивен

 

#6 07.12.2008 19:00:51

nertus
Участник
Зарегистрирован: 07.12.2008
Сообщений: 7

Re: множественная выборка

в случае с групировкой, теряются значения жанров...

Неактивен

 

#7 07.12.2008 19:02:11

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: множественная выборка

Курсоры вряд ли имеют смысл в данном случае. Проще результат запроса, приведенного в ответе №2 обработать как требуется уже в языке программирования.

Неактивен

 

#8 07.12.2008 19:11:20

nertus
Участник
Зарегистрирован: 07.12.2008
Сообщений: 7

Re: множественная выборка

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

Неактивен

 

#9 07.12.2008 19:12:57

nertus
Участник
Зарегистрирован: 07.12.2008
Сообщений: 7

Re: множественная выборка

и если не сложно, для первоначальных условий приведите запрос, который возвратит всех пользователей, у которых один из жанров = 20

Неактивен

 

#10 07.12.2008 19:17:58

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: множественная выборка

Не пойму, все же, чем не нравится GROUP CONCAT.

Ответ на второй вопрос:

SELECT u.id, u.name FROM USERS u, USER_GENRES g ON g.user_id=u.id WHERE g.genre_id=20;

Неактивен

 

#11 07.12.2008 21:32:00

nertus
Участник
Зарегистрирован: 07.12.2008
Сообщений: 7

Re: множественная выборка

если не сложно, приведите пример с GROUP CONCAT

Неактивен

 

#12 07.12.2008 21:44:35

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: множественная выборка

SELECT GROUP_CONCAT(u.id) FROM USERS u, USER_GENRES g ON g.user_id=u.id WHERE g.genre_id=20 GROUP BY g.genre_id;

Неактивен

 

Board footer

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