Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql从5.5升级到5.7后的空查询_Php_Mysql_Laravel 4_Mysql 5.7_Sql Mode - Fatal编程技术网

Php mysql从5.5升级到5.7后的空查询

Php mysql从5.5升级到5.7后的空查询,php,mysql,laravel-4,mysql-5.7,sql-mode,Php,Mysql,Laravel 4,Mysql 5.7,Sql Mode,我正在开发一个运行在mysql 5.5上的laravel 4.2应用程序。此应用程序迁移到新服务器,现在运行mysql 5.7 升级后,一些查询现在返回空 我相信这与mysql 5.7引入的sql_模式有关 示例查询 SELECT * FROM `table1` WHERE `col1` = 'val1' and (SELECT count(*) FROM `table2` WHERE `table2`.`table1_id` = `table1`.`id` and `driver_

我正在开发一个运行在mysql 5.5上的laravel 4.2应用程序。此应用程序迁移到新服务器,现在运行mysql 5.7

升级后,一些查询现在返回空

我相信这与mysql 5.7引入的sql_模式有关

示例查询

SELECT * FROM `table1` WHERE `col1` = 'val1' and 
(SELECT count(*) FROM `table2` 
WHERE `table2`.`table1_id` = `table1`.`id` 
   and `driver_id` = '39') >= 1 and `table1`.`id` = '86' LIMIT 1
这是拉维尔雄辩地提出的一个问题。它返回为空。在旧的mysql 5.5上,它按预期返回一行

如果修复了主查询中的id,则它可以工作

... WHERE `table2`.`table1_id` = 86 ...
正如我之前所说的,我认为这与sql_模式有关


有什么想法吗

在大多数支持它的数据库中,
count(*)
实际上并不检索所有记录并对它们进行计数,而是获取一些元数据字段,这些字段只跟踪行数

当然,可以合理地预期,无论如何实现,
count(*)
的结果将与更复杂但等效的查询相同

SELECT * FROM `table1` WHERE `col1` = 'val1' and 
(SELECT count(`table2`.`id`) FROM `table2` 
WHERE `table2`.`table1_id` = `table1`.`id` 
and `driver_id` = '39') >= 1 and `table1`.`id` = '86' LIMIT 1
或者为了得到布尔值,试试这个

SELECT * FROM `table1` WHERE `col1` = 'val1' and 
(SELECT 1 FROM `table2` 
WHERE `table2`.`table1_id` = `table1`.`id` 
and `driver_id` = '39') >= 1 and `table1`.`id` = '86' LIMIT 1

查询没有问题,确实可以更改查询以避免问题,但这并不能解决真正的问题

解决方案是在优化器\u开关配置中禁用索引\u合并\u交叉点

这是在mysql 5.7上发现的一个bug


这对我很有用。

where子句中表1前面缺少“`”。对不起,我粘贴问题时出现了拼写错误。这就是拉威尔雄辩地复制的sql。为了隐私,我刚刚更改了表和列的名称。如果我将“count(*)更改为“count(
table
id
)”它会工作。敲响了警钟?我明白,但那是拉威尔·雄辩的ORM复制的代码。我相信解决方案是基于sql_模式配置的。我现在有默认值了。你怎么认为?