У меня есть этот запрос здесь:
SELECT posts.id, username, cover, audio, title, postDate, commentsDisabled,
MAX(postClicks.clickDate) as clickDate,
COUNT(*) as ClickCount
FROM postClicks INNER JOIN
posts
ON posts.id = postClicks.postid INNER JOIN
users
ON users.id = posts.user
WHERE posts.private = 0
GROUP BY postClicks.postid
ORDER BY ClickCount
LIMIT 5
Этот запрос дает мне первые 5 результатов ORDER BY Count, который является ClickCount. Каждый postClicks в моей базе данных имеет clickDate, что я пытаюсь сделать сейчас, с 5 результатами, которые я возвращаю, упорядочивая по ClickCount за последние 24 часа, мне все еще нужно 5 результатов, но они должны быть в порядке ClickCount с 24-часовым периодом.
Я использую это в предложении where:
postClicks.clickDate > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
Но после 24-часового периода я не получил бы 5 результатов, мне нужно получить 5 результатов.
Мой вопрос в том, могу ли я поставить условие или случай в моем порядке по статье?
Вы не можете поставить условие в ORDER BY
в этом запросе, потому что это повлияет на LIMIT
. Вместо этого вы можете использовать подзапрос:
SELECT pc5.*
FROM (SELECT posts.id, username, cover, audio, title, postDate, commentsDisabled,
MAX(postClicks.clickDate) as clickDate,
COUNT(*) as ClickCount,
SUM(postClicks.clickDate > DATE_SUB(CURDATE(), INTERVAL 1 DAY)) as clicks24hours
FROM postClicks INNER JOIN
posts
ON posts.id = postClicks.postid INNER JOIN
users
ON users.id = posts.user
WHERE posts.private = 0
GROUP BY postClicks.postid
ORDER BY ClickCount
LIMIT 5
) pc5
ORDER BY clicks24hours DESC;
but they need to be in order of ClickCount with 24 hour period
... можете ли вы показать нам, что это на самом деле означает, в качестве примера вывода?