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

bvb

Мастер
Регистрация
17 Май 2009
Сообщения
189
Реакции
31
Между таблицами books и tags связь один-ко-многим, то есть у книги несколько тегов. В результате выполнения запроса
Код:
SELECT books.ID, books.name as bname, authors.name as aname, tags.name as tag FROM books 
LEFT OUTER JOIN authors ON books.authorID = authors.ID 
LEFT OUTER JOIN tags ON tags.bookID = books.ID
появляются дублирующиеся строки (разница только в tag). Как сделать так, чтобы выборка содержала только одну строку с объединенными тегами?

books
-------------
ID | name
-------------
1 | bname1

authors
-------------
ID | name
-------------
1 | aname1

tags
--------------
bookID | tag
--------------
1 | tag1
1 | tag2

Получить

-------------------------------
ID | bname | aname |tag
-------------------------------
1 | bname1 | aname1 |tag1,tag2
 
добавьте в запрос GROUP BY и GROUP_CONCAT
 
добавьте в запрос GROUP BY и GROUP_CONCAT
А можно подробнее? GROUP_CONCAT я использовал, но очень медленно выполнялся запрос, подозреваю что неверно составил. Кстати в таблицах tags и books по 50 тыс. записей.
 
1-важен ли язык?
2-books.authorID - а в табл books не указали это поле, как понимать?
Возможно так, нужно пробовать:
SELECT distinct books.ID
,books.name as bname
,authors.name as aname
,tags.name as tag
FROM books, authors, tags
WHERE books.authorID = authors.ID(+)
AND books.ID = tags.bookID(+)
 
А может проще два запроса (отдельно для книги, отдельно для тегов)? И по времени скорее всего выиграете.

Кроме того ещё несколько авторов у книги бывает...
 
Назад
Сверху