Фон
У меня есть таблица комментариев.Каждый комментарий относится к определенной строке в таблице «лид» или «продукт».Для каждой строки в таблицах «лидер» и «продукт» может быть несколько комментариев.Также может быть несколько комментариев с одним и тем же kstatus для каждой строки.
comments
INT id /* primary key */
ENUM('lead', 'prod') type /* tells me whether the comment belongs to a row in the lead table or the prod table */
INT fid /* foreign key, refers to the id column in either the lead or prod table */
MEDIUMTEXT comment /* the comment itself */
INT timestamp /* when the comment was written, i.e. 1300530201 */
INT kstatus /* foreign key, refers to the id column in the kstatus column */
lead
INT id
...
prod
INT id
...
kstatus
INT id
...
Комментарий с type = 'lead' и fid = 105 относится к строке в лидере с lead.id = 105.Комментарий с type = 'prod' и fid = 105 относится к строке в prod с prod.id = 105.
Вопрос
Я хочу ВЫБРАТЬ первый предоставленный комментарий (если таковые имеются и основаны на отметке времени) для каждой строки в таблице 'lead' с определенным kstatus (скажем, 14).
Вот моя попытка, которая возвращает слишком мало результатов.Может быть, из-за смешивания fid ссылается на lead.id и fid ссылается на prod.id?
SELECT C1.*
FROM comments AS C1
LEFT JOIN comments AS C2 ON (C1.timestamp > C2.timestamp AND C1.fid = C2.fid)
WHERE C2.timestamp is NULL
AND C1.type = 'lead'
AND C1.kstatus = 14
GROUP BY C1.fid