私のDBにはたくさんの製品があります。私の製品テーブルには、active
デフォルトで1
(つまり「アクティブ」であることを意味する)という列があります。行を削除する代わりに製品を削除すると、アクティブな列を0
名前や説明などで製品を検索する検索機能もあります。フレームワークとして codeigniter を使用しています。これは、クエリを生成するコードです。
$search_query = $this->db->from('company_products')
->where('company_products.active', 1)
->or_like(array('name'=> $keywords, 'model'=> $keywords, 'brand'=> $keywords, 'description'=> $keywords))
->order_by('id', 'RANDOM')
->get();
このコードは、次の mysql クエリを生成します。
SELECT `company_products`.*
FROM (`company_products`)
WHERE `company_products`.`active` = 1
AND `name` LIKE '%chair%'
OR `model` LIKE '%chair%'
OR `brand` LIKE '%chair%'
OR `description` LIKE '%chair%'
製品を「削除」した後 (アクティブな列を 0 に変更)、製品がまだ検索結果に表示されます。これは、コードで起こっていると思われるものです。
(SELECT a product WHERE active = 1 - AND - name LIKE %search_string%)
- OR -
(SELECT a product WHERE model LIKE %search_string%)
- OR -
(SELECT a product WHERE brand LIKE %search_string%)
- OR -
(SELECT a product WHERE description LIKE %search_string%)
しかし、これは私が欲しいものです:
(SELECT a product WHERE active = 1)
- AND -
{ (SELECT a product WHERE model LIKE %search_string%)
- OR -
(SELECT a product WHERE model LIKE %search_string%)
- OR -
(SELECT a product WHERE brand LIKE %search_string%)
- OR -
(SELECT a product WHERE description LIKE %search_string%) }
私の疑似コードがあまり混乱しないことを願っています。codeigniter のアクティブ レコード クラスを使用してこれを実現したいと思います。