Mysql 事件按优先级/粘性排序
我有下面的ORDERBY语句,它成功地按 未来事件 过去事件描述 订购人 当我翻转第1行和第2行时,它确实成功地在“未来”和“过去”内部排序,但我只需要像这样对未来事件进行排序 因此,基本上我需要添加优先级,只有当pm.meta_value>CURDATE时 我该怎么做 完整查询Mysql 事件按优先级/粘性排序,mysql,Mysql,我有下面的ORDERBY语句,它成功地按 未来事件 过去事件描述 订购人 当我翻转第1行和第2行时,它确实成功地在“未来”和“过去”内部排序,但我只需要像这样对未来事件进行排序 因此,基本上我需要添加优先级,只有当pm.meta_value>CURDATE时 我该怎么做 完整查询 实际上,我现在已经解决了自己的问题,尽管我不确定这是否是最好的解决方案 该条款现在看起来如下所示: #1 pm.meta_value < CURDATE(), #2 (case when pm.meta_valu
实际上,我现在已经解决了自己的问题,尽管我不确定这是否是最好的解决方案 该条款现在看起来如下所示:
#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语句
我对改进持开放态度,所以我会让我的答案不被接受,这样其他人就可以得到学分。如果你有更好的想法,请告诉我:-我现在已经设法解决了我自己的问题,尽管我不确定这是否是最好的解决方案 该条款现在看起来如下所示:
#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语句
我对改进持开放态度,所以我会让我的答案不被接受,这样其他人就可以得到学分。如果您有更好的想法,请告诉我:-您可以粘贴完整的SQL吗?你使用的别名可能意味着很多事情。我现在已经添加了它,但在第二条中也有注释,具有相同的含义。pm.meta_value=date,pm2.meta_value=priority请粘贴完整的SQL?你使用的别名可能意味着很多事情。我现在已经添加了它,但在第二条中也有注释,具有相同的含义。pm.meta_值=日期,pm2.meta_值=优先级
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