gpt4 book ai didi

mysql - wp_postmeta 值的多列 ORDER BY

转载 作者:行者123 更新时间:2023-11-29 07:42:24 25 4
gpt4 key购买 nike

使用 WordPress 的 WP_Query 函数,我能够创建一个转换为以下 SQL 的查询;

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id )
INNER JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id )
INNER JOIN wp_postmeta AS mt3 ON ( wp_posts.ID = mt3.post_id )
WHERE 1=1 AND wp_posts.post_type = 'event'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
AND ( wp_postmeta.meta_key = 'core_event_year'
AND ( mt1.meta_key = 'core_event_year'
AND mt2.meta_key = 'core_event_month'
AND mt3.meta_key = 'core_event_day' ) )
GROUP BY wp_posts.ID
ORDER BY wp_postmeta.meta_value DESC LIMIT 0, 10

但是,我需要能够向为 wp_postmeta 表检索的 3 个元素添加排序顺序。由于可以忽略 WP_Query 函数并直接使用 SQL 语句,因此我意识到这是我必须采取的方法。

所以我的问题本质上是关于如何调整上述 SQL 语句,使我能够对从 wp_postmeta 查询的 3 列中的每一列应用排序顺序。目前,查询只是将一揽子 DESC orderby 子句应用于所有字段。

提前致谢。

最佳答案

只需在 ORDER BY 子句中包含需要排序的列即可。看起来您有三个元数据列,分别构成年、月和日。所以试试这个:

ORDER BY mt1.meta_value DESC, 
mt2.meta_value DESC,
mt3.meta_value DESC
LIMIT 0, 10

现在看,meta_values 是文本。您的月份和日期(mt2、mt3)值可能看起来像“1”、“2”...“10”、“11”等。在这种情况下,您必须欺骗 MySQL 认为您的值是数字,或者您的排序会变得不稳定。这很简单:向文本值添加零。这会将您的文本类型转换为整数。 TRIM() 函数去掉前导和尾随空格。

ORDER BY 0+TRIM(mt1.meta_value) DESC, 
0+TRIM(mt2.meta_value) DESC,
0+TRIM(mt3.meta_value) DESC
LIMIT 0, 10

或者,正如 Marcus 建议的那样,您可以使用 DATE 对象进行排序。您可以从三个元数据列中创建一个日期对象,如下所示:

 STR_TO_DATE(CONCAT_WS('-',
TRIM(mt1.meta_value),
TRIM(mt2.meta_value),
TRIM(mt3_meta_value)),
'%Y-%m-%d)

CONCAT_WS 将您的三个值转换为“2015-02-14”。然后,STR_TO_DATE(arg,'%Y-%m-%d') 将该字符串转换为日期。

这很酷,因为您可以通过它进行排序,如下所示:

 ORDER BY STR_TO_DATE(CONCAT_WS('-',
TRIM(mt1.meta_value),
TRIM(mt2.meta_value),
TRIM(mt3_meta_value)),
'%Y-%m-%d) DESC

您还可以在带有日期算术的 WHERE 子句中使用它,例如 ....

 WHERE (thatBigDateExpression) >= NOW() - INTERVAL 2 MONTH

关于mysql - wp_postmeta 值的多列 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28675581/

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