gpt4 book ai didi

mysql - 按优先级/粘性排序的事件

转载 作者:行者123 更新时间:2023-11-30 22:23:27 26 4
gpt4 key购买 nike

我有以下 ORDER BY 语句,它成功地对记录进行了排序

  1. future 事件 ASC
  2. 过去的事件 DESC

排序方式

pm.meta_value < CURDATE(),
(case when pm.meta_value > CURDATE() then pm.meta_value end) ASC,
(case when pm.meta_value < CURDATE() then pm.meta_value end) DESC

然而,现在已经提出请求,即客户端还需要能够优先处理某些 future 事件。为此,我添加了优先级 0(无优先级)、123(最高优先级) .我无法仅将此优先级系统应用于即将发生的事件。

下面的语句确实适用于按优先级对所有事件进行排序,但不仅仅是 future 事件:

#1 pm2.meta_value DESC, # pm2.meta_value = priority
#2 pm.meta_value < CURDATE(), # pm.meta_value = date
#3 (case when pm.meta_value > CURDATE() then pm.meta_value end) ASC,
#4 (case when pm.meta_value < CURDATE() then pm.meta_value end) DESC

当我翻转行 #1#2 时,它确实成功地在未来和过去内排序,但我只需要像这样对 future 事件进行排序。

所以基本上我需要添加优先级,只有 当 pm.meta_value > CURDATE()

我该如何解决这个问题?

完整查询

      SELECT *
FROM %2$s p
INNER JOIN %3$s pm ON (p.ID = pm.post_id AND pm.meta_key = "events_startdate")
LEFT JOIN %3$s pm2 ON (p.ID = pm2.post_id AND pm2.meta_key = "events_priority")
INNER JOIN `%4$sicl_translations` ON
(`%4$sicl_translations`.element_id = p.ID AND `language_code` = "%5$s")
WHERE p.post_status = "publish"
AND p.post_type = "%1$s"
ORDER BY
pm.meta_value < CURDATE(),
pm2.meta_value DESC,
(case when pm.meta_value > CURDATE() then pm.meta_value end) ASC,
(case when pm.meta_value < CURDATE() then pm.meta_value end) DESC

最佳答案

我现在实际上已经设法解决了我自己的问题,尽管我不确定这是否是最佳解决方案。

子句现在看起来像这样:

#1 pm.meta_value < CURDATE(),
#2 (case when pm.meta_value > CURDATE() then pm2.meta_value end) DESC,
#3 (case when pm.meta_value > CURDATE() then pm.meta_value end) ASC,
#4 (case when pm.meta_value < CURDATE() then pm.meta_value end) DESC

#2 行,我只是包装了相同的 case 优先级语句。

我对改进持非常开放的态度,因此我会将我的答案保留为“未接受”,以便其他人可以获得学分。如果您有更好的主意,请告诉我:-)

关于mysql - 按优先级/粘性排序的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36031651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com