Выбрать сообщения с их коментариями - MySQL

Узнай цену своей работы

Формулировка задачи:

Привет всем. Прошу помощи. Имееться 2 таблицы:
CREATE TABLE IF NOT EXISTS `recognition` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`id_host` INT(11) NOT NULL COMMENT 'кто',
`id_client` INT(11) NOT NULL COMMENT 'кому',
`message` VARCHAR(120) CHARACTER SET cp1251 NOT NULL,
`bonus` VARCHAR(60) CHARACTER SET cp1251 NOT NULL,
`bonus_img` VARCHAR(155) CHARACTER SET utf8 NOT NULL,
`department` VARCHAR(88) CHARACTER SET utf8 DEFAULT NULL,
`likes` INT(11) NOT NULL,
`date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4342 ;

CREATE TABLE IF NOT EXISTS `recog_comments` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `id_recog` INT(11) NOT NULL,
  `id_user` INT(11) NOT NULL,
  `comment` VARCHAR(250) CHARACTER SET cp1251 NOT NULL,
  `likes` INT(11) NOT NULL,
  `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=52 ;
Имееться запрос который делает сгрупированную выборку:
SELECT r.*, r.date DATE, u.email, s.name_en name_from, s.sapphoto host_photo, s.function_en from_func, COUNT(rc.comment) comments, rc.likes likes_comment, u.email email_from FROM recog r
LEFT JOIN USER u ON u.id = r.id_host
LEFT JOIN _sap s ON s.sapemail = u.email
LEFT JOIN recog_comm rc ON r.id = rc.id_recog
WHERE r.department IS NOT NULL GROUP BY r.date ORDER BY r.date DESC
Как написать запрос что бы к каждому сгрупированому сообщению что мы выбираем добавлялся массив его коментариев? В данном случае когда я делаю еще один ДЖОИН то добавляеться всего 1 комментарий (Мне нужно что бы все.). Помогите пожалуйста!

Решение задачи: «Выбрать сообщения с их коментариями»

textual
Листинг программы
SELECT 
    r.*, r.DATE DATE, u.email, s.name_en name_from, s.sapphoto host_photo, s.function_en from_func,   COUNT(rc.comment) comments, rc.likes likes_comment, u.email email_from,
    (SELECT Group_Concat(rcom.coments SEPARATOR '; ') FROM recog_comments rcom WHERE rcom.id_recog=r.id) AS comentts 
FROM 
    recog r
    LEFT JOIN USER u ON u.id = r.id_host
    LEFT JOIN _sap s ON s.sapemail = u.email
    LEFT JOIN recog_comm rc ON r.id = rc.id_recog
WHERE 
    r.department IS NOT NULL GROUP BY r.DATE ORDER BY r.DATE DESC

Объяснение кода листинга программы

В представленном коде выполняется запрос к базе данных с использованием языка SQL. Этот запрос имеет следующую структуру:

  1. SELECT - выбираются нужные поля из таблиц.
  2. FROM - указываются таблицы, из которых берутся данные.
  3. WHERE - задаются условия для отбора данных.
  4. GROUP BY - группировка данных по определенному полю.
  5. ORDER BY - сортировка данных по определенному полю. По порядку:
  6. В блоке SELECT выбираются следующие поля:
    • r.* - все поля из таблицы recog (кроме id).
    • r.DATE - дата из таблицы recog.
    • u.email - email из таблицы USER.
    • s.name_en - имя из таблицы _sap.
    • s.sapphoto - фото из таблицы _sap.
    • s.function_en - функция из таблицы _sap.
    • COUNT(rc.comment) - количество комментариев (без учета кавычек) из таблицы recog_comm.
    • rc.likes - количество лайков (без учета кавычек) из таблицы recog_comm.
    • u.email - email из таблицы USER.
    • (SELECT Group_Concat(rcom.coments SEPARATOR '; ') FROM recog_comments rcom WHERE rcom.id_recog=r.id) AS comentts - список комментариев, объединенных по id записи (без учета кавычек).
  7. В блоке FROM указываются таблицы, из которых берутся данные:
    • recog - таблица, из которой берутся основные данные.
    • USER - таблица, из которой берется email.
    • _sap - таблица, из которой берутся имя, фото и функция.
    • recog_comm - таблица, из которой берутся данные о комментариях и лайках.
  8. В блоке WHERE задаются условия для отбора данных:
    • r.department IS NOT NULL - выбираются только записи, у которых есть отдел.
  9. В блоке GROUP BY группируются данные по дате.
  10. В блоке ORDER BY данные сортируются по дате в обратном порядке. Следует отметить, что данный код может быть не полностью корректным, так как не указаны некоторые важные детали, такие как имена таблиц и полей, а также не указаны кавычки вокруг названий и значений переменных.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.4 из 5