Одиночный запрос MySQL сортировка имеет данные AndBelongsToMany - PullRequest
0 голосов
/ 23 августа 2011

У меня есть набор таблиц

  • Документы
  • Группы
  • Ключевые слова

Они связаны следующим образом

  • Документ имеет и принадлежит ко многим группам
  • Документ имеет и принадлежит ко многим ключевым словам

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

Причина в том, что я использую sphinx для индексации таблицы документов, и мне нужно индексировать заголовок, контент и ключевые слова. Я также должен иметь возможность фильтровать по группе.

Вот что у меня есть:

SELECT
    Link.document_id AS id,
    Link.group_id AS db_id,
    Document.title,
    Document.description,
    Group.name AS db_name,
    GROUP_CONCAT(distinct Keyword.`content` SEPARATOR ", ") as `keywords`
FROM `groups_documents` AS Link
    LEFT JOIN `documents` AS `Document` ON (Document.id = Link.document_id)
    LEFT JOIN `groups` AS `Group` ON (`Group`.id = Link.group_id)
    LEFT JOIN `keywords_documents` AS `KLink` ON (`KLink`.`document_id` = `Link`.`document_id`)
    LEFT JOIN `keywords` AS `Keyword` ON (`Keyword`.`id` = `KLink`.`keyword_id`)

но, к сожалению, это не работает, у меня только один ряд.

1 Ответ

0 голосов
/ 23 августа 2011

Если вы используете функцию group в выражении, не содержащем предложения GROUP BY, это эквивалентно группировке по всем строкам.

Вам нужно добавить что-то в группу как Group. id

...