Условие SQL в предложении ORDER BY

0

У меня есть этот запрос здесь:

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 результатов.

Мой вопрос в том, могу ли я поставить условие или случай в моем порядке по статье?

  • 0
    but they need to be in order of ClickCount with 24 hour period ... можете ли вы показать нам, что это на самом деле означает, в качестве примера вывода?
Теги:

1 ответ

1
Лучший ответ

Вы не можете поставить условие в 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;
  • 0
    Кажется, работает .... спасибо!
  • 1
    @ user979331: если вы принимаете этот ответ, нажмите на серую галочку слева от ответа. Он станет зеленым, и другие пользователи будут знать, что это ответ, который работал для вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню