ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列
Posted
技术标签:
【中文标题】ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列【英文标题】:Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 【发布时间】:2018-06-12 19:50:05 【问题描述】:我正在尝试通过 meta_value 订购 wp_query
我使用以下参数
array(
'post_type' =>'event',
'posts_per_page' => -1,
'meta_query' => array(
'dates_query' => array(
'key' => 'dates',
'value' => date(time()),
'compare' => '>='
)
),
'orderby' => 'dates_query',
'order' => 'ASC',
'paged' => 1
);
这是由 wp_query 生成的请求
SELECT wp_posts.* FROM wp_posts
INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
WHERE 1=1 AND ( ( wp_postmeta.meta_key = 'dates'
AND wp_postmeta.meta_value >= '1514960717' ) )
AND wp_posts.post_type = 'event'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'completed'
OR wp_posts.post_status = 'acf-disabled')
GROUP BY wp_posts.ID
ORDER BY CAST(wp_postmeta.meta_value AS CHAR) ASC
不幸的是,结果是错误的,当尝试手动执行查询时,我得到以下错误:
Expression #1 of ORDER BY clause is not in GROUP BY clause and contains non-aggregated column
我知道有一个选项可以禁用“only_full_group_by”,但我想知道在这种情况下这是否是最佳做法
谢谢
【问题讨论】:
你为什么首先与GROUP BY
聚合?您从未在查询中实际使用它。没有看到任何相反的东西,我建议你摆脱GROUP BY
。
【参考方案1】:
不确定您为什么使用 data_query 但您应该尝试直接在键值比较上使用 meta_query。让我知道它是否有效。
array(
'post_type' => 'event',
'posts_per_page'=> -1,
'paged' => 1,
'meta_key' => 'dates',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'dates',
'value' => date(time()), //<-- Cross check if your date has same format.
'compare' => '>=',
'type' => 'DATE'
)
)
);
【讨论】:
【参考方案2】:我无法对 wp_query 发表评论,但作为参考,这里有一个有效查询的示例(虽然我无法想象为什么要将整数像字符串一样排序):
SELECT DISTINCT p.*
FROM wp_posts p
JOIN wp_postmeta m
ON p.ID = m.post_id
WHERE m.meta_key = 'dates'
AND m.meta_value >= '1514960717'
AND p.post_type = 'event'
AND p.post_status IN('publish','completed','acf-disabled')
ORDER
BY CAST(m.meta_value AS CHAR) ASC;
【讨论】:
以上是关于ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列的主要内容,如果未能解决你的问题,请参考以下文章
only_full_group_by : "ORDER BY 子句不在 GROUP BY 子句中"
Doctrine Querybuilder ORDER BY 子句不在 SELECT 列表中
ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效
ORDER BY 子句中的语法错误和条件表达式中的数据不匹配