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 INNOT EXIST

4

2 に答える 2

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 に答える
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 "; 

このようにして、あなたは間違いなく結果を得るでしょう。

于 2012-09-18T06:05:15.663 に答える