2014-09-18 4 views
0

У меня есть 3 таблицы с книгами, авторами и жанрыПовторяющихся полей в результате цв запроса

Я хочу, чтобы получить выходной результат, как: книги, автор и жанры, но когда я делаю этот запрос, у меня есть повторяющиеся поля, если книги имеют 5 жанров, например, в первой строке результата запроса), также повторяются строки автора 5 или наоборот.

Пример на SQL Fiddle здесь:

http://sqlfiddle.com/#!2/a15d8/1

мне нужно в первом ряду:

книги | один автор | пять жанров ... и т.д.

+1

MySQL DISTINCT оператор ЗЕЬЕСТ, чтобы исключить повторяющиеся строки в наборе результатов – deadman

ответ

1

Чтобы получить то, что вы хотите, добавьте DISTINCT в строку 4, и у вас не будет дубликатов. Тем не менее, вы все равно можете вернуть более одного автора (уникальный), но это то, что ваш запрос должен вернуть так, как он есть.

как:

group_concat(DISTINCT concat_ws (' ',`a`.`last_name`,`a`.`first_name`,`a`.`middle_name`)) as author, 
+0

Да, работать как Шарме! Спасибо –

0

Вы должны пересмотреть свою схему. Просто некоторые мысли поделиться: (я знаю, что это не отвечает на вопрос, но поверьте мне: с помощью хорошей схемы с самого начала может сэкономить много работы позже)

  1. В ваших книгах таблицы использовать author.id как иностранный ключ. В противном случае у вас возникнут проблемы, как только вы получите дубликаты имен (что возможно). Соединение этих таблиц также станет проще.

  2. У вас, скорее всего, будет определенный набор жанров и назначат их вашим книгам. Это n: m-отношения. Значение одной книги может иметь несколько жанров, и один жанр может быть присвоен нескольким книгам. Для этого вам понадобится таблица отношений. Затем таблица отношений будет содержать идентификатор книги и идентификатор жанра и связать их.

Смежные вопросы