0

我有这个 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空。

我考虑过使用NOT INorNOT EXIST但我不确定在这种情况下如何使用这些?

4

2 回答 2

1

问题就在这里。

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

在此where子句中,两个条件都为真或假,但当两个条件都为假时,它将失败。

试试这个,

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

这样你一定会得到结果。

于 2012-09-18T06:05:15.663 回答
1

将键的条件移动到 JOIN 条件中应该可以解决问题:

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
于 2012-09-18T06:16:52.773 回答