我有这个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 IN
或NOT EXIST
,但我不确定如何在这种情况下使用这些内容?
答案 0 :(得分:1)
问题出在这里。
$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 ";
通过这种方式你肯定会得到结果。
答案 1 :(得分: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