У меня есть две таблицы: таблицы «Темы» и объединенные таблицы «Комментарии», обе из которых содержат столбцы отметок времени. Я хотел бы упорядочить список тем так, чтобы темы с последним комментарием были наверху. Однако, если у темы нет комментариев, я хочу, чтобы она была отсортирована по дате ее создания.
Другими словами, я пытаюсь сделать так, чтобы темы сортировались по дате их создания только , если у них нет комментариев - в основном, как на любом форуме. Например, если тема A (пустая) была создана после тема B (не пустая), но тема B получила ответ, который был самым последним, порядок должен быть B, A. Я не хочу все пустые темы вверху, если они старые, или внизу, если они новые.
Я пробовал оператор IF ISNULL, но он применяется ко всему столбцу, а не к каждой отдельной строке, поэтому я получаю пустые темы, застрявшие в верхней или нижней части канала.
Полагаю, мне нужно создать виртуальный столбец, содержащий только самые последние комментарии по каждой теме ...?
Вот полное утверждение:
SELECT
$showbody,
Topics.Title,
Topics.id AS tID,
Topics.Timestamp,
Topics.MemberID,
Users.id,
Users.FirstName,
Users.LastName,
GROUP_CONCAT(DISTINCT Tags.Keywords SEPARATOR ', ') AS Tags,
COUNT(Comments.id) AS NumberOfComments,
(
SELECT COUNT(Comments.id)
FROM Comments
LEFT JOIN Views ON Comments.TopicID = Views.TopicID
WHERE Comments.Timestamp > Views.Visited
) AS NewComments
FROM Topics
LEFT JOIN Users ON Topics.MemberID = Users.ID
LEFT JOIN Comments ON Topics.id = Comments.TopicID
LEFT JOIN Tags ON Topics.id = Tags.TopicID
WHERE Topics.id NOT IN (
SELECT Tags.TopicID
FROM Tags
WHERE Keywords IN (
SELECT Tag
FROM Filters
WHERE MemberID = '$_SESSION[SESS_MEMBER_ID]'
)
GROUP BY Tags.TopicID
)
GROUP BY Topics.id
ORDER BY Comments.Timestamp, Topics.Timestamp DESC LIMIT $plim
Любая помощь будет принята с благодарностью