У меня проблемы с написанием запроса MySQL, я знаю, что могу сделать это с помощью итерации, но верю, что это может быть достигнуто за один запрос, я надеюсь, что кто-то может указать мне правильное направление.
У меня есть таблица комментариев и таблица пользователей.Я добавляю функцию «Ответить на комментарий», изменяя таблицу комментариев так, чтобы она содержала идентификатор комментария, на который был дан ответ.
структура данных:
`comments`
(`i` int(5) NOT NULL AUTO_INCREMENT
,`id` int (5) NOT NULL
,`deleted` tinyint NULL
,`articleId` int (5) NOT NULL
,`userId` VARCHAR (200) NOT NULL
,`comment` VARCHAR (2000) NOT NULL
,`replyTo` int (5) NULL
,`knownFrom` datetime NOT NULL
,`knownTo` datetime NOT NULL
'users'
(`i` int(5) NOT NULL AUTO_INCREMENT
,`id` VARCHAR (200) NOT NULL
,`deleted` tinyint NULL
,`name` VARCHAR (200) NOT NULL
,`email` VARCHAR(200) NOT NULL
,`knownFrom` datetime NOT NULL
,`knownTo` datetime NOT NULL
В настоящее время я получаю комментарии, используя приведенные нижеquery:
SELECT
c.id, c.articleId, c.userId, c.comment, c.replyTo, u.name, c.knownFrom
FROM `comments` c
INNER JOIN `users` u ON c.userId=u.id
WHERE
c.`articleId` = :articleId
AND c.`deleted` IS NULL
AND c.`knownTo` = '9999-12-31 23:59:59'
AND u.`knownTo` = '9999-12-31 23:59:59'
Как получить данные в этом формате?
c.id c.articleId c.userId c.comment c.replyTo u.name c.knownFrom
1 1 1 comment null user1 date
2 1 2 reply 1 user2 date
3 1 3 reply 1 user4 date
4 1 4 comment null user3 date
5 1 5 comment null user5 date
Структура структуры:
- Все комментарии получены для статьи.
- Комментарии, которые не являются ответами, сначала извлекаются со столбцом 'repliedTo', равным нулю.
- Ответы следуют за комментарием с соответствующим идентификатором.
Возможно ли это водин запрос или с помощью суб-выбора?
Это лучше, чем итерация по комментариям для получения ответов?
Заранее большое спасибо :-) !!