gpt4 book ai didi

mysql - 带有主要 NOT IN 的 SQL 查询不起作用

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

有人知道这个查询有什么问题吗?

这本身就可以完美地工作:

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 更改为 限制 10。前者表示限制为距第一条记录偏移 010 条记录。如果您想要记录 615,但对于 110 作为 LIMIT 则这是多余的10 具有相同的效果并且稍微简单一些。整个语句末尾的 LIMIT 0, 30 也是如此。

至于声明的主体,我没有尝试指定应返回哪些字段(或这些字段的聚合函数),因为您没有声明表明您的要求/偏好是什么。如果您对 GROUP BY 为您留下的一组仍然有效的值感到满意,那么一切都很好,但如果不是,那么我建议您重写您的问题以具体说明该细节。

默认情况下,MySQL 将受 GROUP BY 影响的数据按升序排序,但如果还存在 ORDER BY 子句,则它会覆盖 GROUP BY 的排序模式。因此,在任何一个 GROUP BY car 子句之后指定 DESC 没有任何好处,因此我已将其删除。

有趣的旁注:您可以通过指定 ORDER BY NULL 来覆盖 GROUP BY 的排序。

如果您有任何问题或意见,请随时发表评论。

进一步阅读

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 的更简单解释

关于mysql - 带有主要 NOT IN 的 SQL 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43557479/

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