有谁知道这个查询有什么问题?
这本身就可以完美运行:
SELECT * FROM
(SELECT * FROM data WHERE site = '".$id."'
AND disabled = '0'
AND carvotes NOT LIKE '0'
AND (time > ( now( ) - INTERVAL 14 DAY ))
GROUP BY car ORDER BY carvotes DESC LIMIT 0 , 10)
X order by time DESC
这样做也是如此:
SELECT * FROM data WHERE site = '".$id."' AND disabled = '0' GROUP BY car DESC ORDER BY time desc LIMIT 0 , 30
但是像这样组合它们:
SELECT * FROM data WHERE site = '".$id."' AND disabled = '0' AND car NOT IN (SELECT * FROM
(SELECT * FROM data WHERE site = '".$id."'
AND disabled = '0'
AND carvotes NOT LIKE '0'
AND (time > ( now( ) - INTERVAL 14 DAY ))
GROUP BY car ORDER BY carvotes DESC LIMIT 0 , 10)
X order by time DESC) GROUP BY car DESC ORDER BY time desc LIMIT 0 , 30
给出错误。有任何想法吗?
请尝试以下...
$result = mysqli_query( $con,
"SELECT *
FROM data
WHERE site = '" . $id .
"' AND disabled = '0'
AND car NOT IN ( SELECT car
FROM ( SELECT car,
carvotes
FROM data
WHERE site = '" . $id .
"' AND disabled = '0'
AND carvotes NOT LIKE '0'
AND ( time > ( NOW( ) - INTERVAL 14 DAY ) )
GROUP BY car
ORDER BY carvotes DESC
LIMIT 10 ) X
)
GROUP BY car
ORDER BY time DESC
LIMIT 30" );
您的问题的主要原因是car NOT IN ( SELECT * FROM ( SELECT *
... 您正在尝试将每个记录的值car
与子查询返回的每一行进行比较。IN
要求您在比较的两侧具有相同数量的字段。通过SELECT *
在子查询的两个级别上使用,您可以确保比较的右侧有很多字段,data
而左侧有单个字段,这让 MySQL 感到困惑。
由于您的目标是与单个字段进行比较,即car
,我们的子查询必须car
仅从其数据集中选择该字段。由于子查询结果的排序顺序对IN
比较没有影响,并且由于我们最内层的查询将只返回car
,因此我删除了子查询的外层。
除了将子查询的第一部分SELECT car
更改为 之外,我对子查询所做的唯一其他更改是更改LIMIT 0, 10
为LIMIT 10
. 前者意味着限制从第一条记录10
偏移的0
记录。如果您想要记录6
to 15
,这很有用,但对于1
to 来说10
是多余的,因为它LIMIT 10
具有相同的效果并且稍微简单一些。同上,用于LIMIT 0, 30
在您的整个语句的末尾。
至于声明的主体,我没有尝试指定应该返回哪些字段(或这些字段的聚合函数),因为您没有说明您的要求/偏好是什么。如果您对GROUP BY
留下一组仍然有效的值感到满意,那么一切都很好,但如果不是,那么我建议您重写您的问题以具体说明该细节。
默认情况下,MySQL 将受 a约束的数据GROUP BY
按升序排序,但如果ORDER BY
还存在子句,则它会覆盖GROUP BY
的排序模式。因此,在DESC
您的任何一个GROUP BY car
条款之后指定都没有好处,因此我已将其删除。
有趣的旁注:您可以GROUP BY
通过指定来覆盖 a的排序ORDER BY NULL
。
如果您有任何问题或意见,请随时发表相应的评论。
进一步阅读
https://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html - 关于优化ORDER BY
排序
https://dev.mysql.com/doc/refman/5.7/en/select.html - 关于SELECT
语句的语法 - 特别是与LIMIT
.
https://www.w3schools.com/php/php_mysql_select_limit.asp - 更简单的解释LIMIT
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句