Mysql / php - Query Question - PullRequest
       11

Mysql / php - Query Question

0 голосов
/ 07 октября 2010

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

Вот что у меня есть: Таблица с, иImageID, ImageName, GalleryID Другая таблица с комментариями, автором, датой, ImageID

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

ImageID: 1234, ImageName: IMG425, GalleryID: 42, Комментарии: Круто! ||| Джон Смит ||| 2010-09-06 ~~ Отличный снимок! ||| Ричард Кларк ||| 2010-10-01 ~~ Я помню этот прогон. ||| Сьюзан Эдвардс ||| 2010-10-04

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

Ответы [ 3 ]

1 голос
/ 08 октября 2010

GROUP_CONCAT () - путь, а другие ответы близки.KISS.

SELECT
   ImageID, ImageName, GalleryID
   , GROUP_CONCAT(
      CONCAT_WS('|||', Comment.author, Comment.date, Comment.content)
      SEPARATOR '~~'
   ) as comments
FROM
   Images
   JOIN Galleries USING (GalleryID)
   JOIN Comments USING (ImageID)
WHERE
   GalleryID = 42
GROUP BY
   ImageID, ImageName, GalleryID

Обратите внимание, что по умолчанию GROUP_CONCAT () имеет очень короткую максимальную длину.Возможно, вам придется запустить

SET group_concat_max_len = 65535;
0 голосов
/ 08 октября 2010

Почему бы просто не извлечь данные комментариев в отдельном запросе?

Несмотря на то, что дополнительная поездка в базу данных не идеальна, вероятно, она потребует не меньших затрат, чем объединение и извлечение этих данных, а разделение запросов сделает ваш код менее беспорядочным.

0 голосов
/ 08 октября 2010

в mysql есть функция с именем GROUP_CONCAT Я действительно не пробовал ее, но думаю, что она может помочь

Удачи

РЕДАКТИРОВАНИЕ:

* 1008запрос может быть что-то вроде
SELECT img.id,img.name,img.galleryID, 
   GROUP_CONCAT(com.author,comment.date,com.content 
                ORDER BY comm.date SEPARATOR '|||')
FROM images img JOIN comments com ON img.imageID=com.imageID
GROUP BY img.id,img.name,img.galleryID;

или что-то в этом роде, но я не знаю, работает ли group_concat с объединениями

...