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

宾纳通

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

这本身就可以完美运行:

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, 10LIMIT 10. 前者意味着限制从第一条记录10偏移的0记录。如果您想要记录6to 15这很有用,但对于1to 来说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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有NOT IN子句的SQL DELETE查询不起作用

来自分类Dev

具有“不存在”的SQL查询不起作用

来自分类Dev

带有左连接的 SQL Server 2005 更新查询不起作用

来自分类Dev

sfsafariviewcontroller叠加,带有主页按钮不起作用

来自分类Dev

SQL查询多个AND和OR不起作用

来自分类Dev

CAST在SQL查询中不起作用

来自分类Dev

SQL查询搜索不起作用

来自分类Dev

带顺序的SQL查询不起作用

来自分类Dev

酒店预订SQL查询不起作用

来自分类Dev

SQL删除查询不起作用

来自分类Dev

SQL请求-搜索查询不起作用

来自分类Dev

扩展PHP SQL查询不起作用

来自分类Dev

SQL查询条件不起作用

来自分类Dev

SQL查询错误不起作用

来自分类Dev

SQL子查询不起作用

来自分类Dev

查询在 SQL Server 中不起作用

来自分类Dev

带有按语句分组的SQL更新不起作用

来自分类Dev

sql数组不起作用(背景:带有postgresql的nodejs)

来自分类Dev

使用EF查询映射SQL查询不起作用

来自分类Dev

ADODB SQL 查询 ORDER BY 子查询不起作用

来自分类Dev

在sqlDeveloper中运行它时sql查询有效,但在休眠状态下不起作用

来自分类Dev

我在 sql 中使用事务来强制所有查询结果成功。但它不起作用

来自分类Dev

带有复合主键查询的JPA COUNT不起作用

来自分类Dev

带有连接的Joomla Jdatabase查询代码不起作用

来自分类Dev

带有HiveContext的Apache Spark查询不起作用

来自分类Dev

带有多个查询的SqlCommand不起作用

来自分类Dev

带有变量的XML查询不起作用

来自分类Dev

WordPress查询带有数组的页面不起作用

来自分类Dev

带有多个查询的Ajax发布不起作用