Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.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 列的select值不存在_Php_Mysql_Database_Opencart - Fatal编程技术网

Php 列的select值不存在

Php 列的select值不存在,php,mysql,database,opencart,Php,Mysql,Database,Opencart,我有这个php查询 $sql = "SELECT * FROM store AS s LEFT JOIN setting as set ON (s.store_id = set.store_id)"; $sql .= " WHERE (set.key = 'config_template' OR set.key IS NULL)"; $sql .= " ORDER BY url"; $query = $this->db->query($s

我有这个php查询

$sql = "SELECT * 
        FROM store AS s 
        LEFT JOIN setting as set ON (s.store_id = set.store_id)";
$sql .= " WHERE (set.key = 'config_template' OR set.key IS NULL)";    
$sql .= " ORDER BY url";

$query = $this->db->query($sql);
我想做的是返回
key
等于“config_template”的所有行。但是,如果没有与“config_template”匹配的键,我仍然希望返回该行,除非列
key
为空

我曾考虑过使用
不在
不存在
,但我不确定在这种情况下如何使用它们?

问题就在这里

$sql .= " WHERE (set.key = 'config_template' OR set.key IS NULL)"; 
在此
where
子句中,两个条件都是true或false,但当两个条件都为false时,它将失败

试试这个

$sql .= " WHERE (set.key = 'config_template' OR set.key IS NULL) OR/AND SECOND_CONDITION "; 

通过这种方式,您肯定会得到结果。

将密钥的条件移动到连接条件中应该可以做到这一点:

SELECT * 
FROM store AS s 
  LEFT JOIN setting as set 
         ON s.store_id = set.store_id AND set.key = 'config_template'
ORDER BY url

我认为上面的查询很好,因为您已经使用了
set.key为NULL
。您是否尝试过使用
右连接
?您说过您想要一个特定的
商店id
,但您没有在查询中指定它?另外,是否可以在
设置中的
存储id
的同一
下同时使用
key='config_template'
key为NULL
?如果是,您将得到两行。我已经更新了问题,我想要所有的店铺ID。只会有key='config_template',或者它不存在,永远不会两者都存在。