MySQL: поставя всички стойности на 1:m в едно поле?

Да приемем следните възможни модели:

Модел 1:

TABLE: book
- book_id
- name

TABLE: book_author
- book_author_id
- book_id
- author_id

TABLE: author
- author_id
- name

(една книга може да има 0 или повече автори)

Модел 2:

TABLE: book
- book_id
- name

TABLE: book_eav
- book_eav_id
- book_id
- attribute (e.g. "author")
- value (e.g. "Tom Clancy")

(една книга може да има 0 или повече автори + информация за издателство, брой страници и т.н.)

Как да направя заявка за това по такъв начин, че да получа обратно book.book_id, book.name + поле authors, което съдържа 0 или повече стойности, свързани с книгата?

Опитвам се да направя това, за да мога да използвам резултатите от заявката като документи в индекс на Lucene.


person StackOverflowNewbie    schedule 21.11.2011    source източник


Отговори (2)


Lucene поддържа множество полета с едно и също име, което означава, че всъщност можете да съхранявате множество полета с име „Автор“ в един и същи документ.

Предлагам ви наистина да направите това и да извлечете допълнителни данни, като използвате друг израз, например:

един избор за книги. един избор за book_id и автора.

person jishi    schedule 22.11.2011

Разгледайте функцията GROUP_CONCAT.

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

person Memochipan    schedule 21.11.2011