Несколько GROUP_CONCAT в разных полях с использованием MySQL

У меня есть такой запрос:

SELECT product.id,
       GROUP_CONCAT(image.id) AS images_id,
       GROUP_CONCAT(image.title) AS images_title,
       GROUP_CONCAT(facet.id) AS facets_id
...
GROUP BY product.id

И запрос работает, но не так, как ожидалось, потому что, если у меня есть продукт с 5 гранями и 1 изображением (предположим, что изображение с id = 7), я получаю что-то вроде это в "images_id":
"7,7,7,7,7"
Если у меня есть 2 изображения (7 и 3), я получаю что-то вроде:
"7,7,7,7 , 7,3,3,3,3,3 "
и в фасетах я получаю что-то вроде:
" 8,7,6,5,4,8,7,6,5,4 "

Я думаю, что MySQL производит некое объединение различных строк, возвращаемых запросом, а затем объединяет все.

Мой ожидаемый результат (для последнего примера):

images_id = "7,3"
facets_id = "8,7,6,5,4"

Я могу получить это, используя DISTINCT в GROUP_CONCAT, но тогда у меня есть другая проблема: Если у меня есть два изображения с одинаковым заголовком, одно из них опущено, а затем я получаю что-то вроде:
{{1} } images_id = "7,3,5"
images_title = "Title7and3, Title5"

Таким образом, мне не хватает связи между images_id и images_title.

Кто-нибудь знает, можно ли сделать этот запрос в MySQL?

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

Пожалуйста, объясните, что, по вашему мнению, является лучшим решением этой проблемы и почему.

Спасибо!

21
задан Enrique 21 September 2011 в 21:15
поделиться