0

ここにvar_dumpedクエリがあり、間違った結果が表示されます。

select p.*
, case when p.specials_new_products_price >= 0.0000 
  and (p.expires_date > Now() or p.expires_date IS NULL) 
  and p.status != 0 then 
      p.specials_new_products_price 
  else 
      p.products_price 
end price 

from wp_global_products_table p 
INNER JOIN wp_blogs s ON s.blog_id = p.blog_id 
where p.products_name like '%indifi%' 
or p.products_description like '%indifi%' 
and s.countries_id = '168' 
and global_category_id = '15' 
and p.display_product = '1' 
and p.products_status = '1' 
order by p.products_date_added DESC, p.products_name"

これが元のクエリです。

$catglobal_sql = "select p.*, case when p.specials_new_products_price >= 0.0000 and (p.expires_date > Now() or p.expires_date IS NULL or p.expires_date ='0000-00-00 00:00:00') and p.status != 0 then p.specials_new_products_price else p.products_price end price from ".TABLE_GLOBAL_PRODUCTS." p INNER JOIN ".TABLE_STORES." s ON s.blog_id = p.blog_id where MATCH (p.products_name,p.products_description) AGAINST ('%".$search_key."%') ".$country_q." ".$zone." ".$currency_type." ".$search_cat." and p.display_product = '1' and p.products_status = '1' ".$duration." ".$product_type." ".$price_range." order by p.products_date_added DESC, p.products_name";
if (!mysql_num_rows(mysql_query($catglobal_sql))) {
$catglobal_sql = "select p.*, case when p.specials_new_products_price >= 0.0000 and (p.expires_date > Now() or p.expires_date IS NULL) and p.status != 0 then p.specials_new_products_price else p.products_price end price from ".TABLE_GLOBAL_PRODUCTS." p INNER JOIN ".TABLE_STORES." s ON s.blog_id = p.blog_id where p.products_name like '%".$search_key."%' or p.products_description like '%".$search_key."%' ".$country_q." ".$zone." ".$currency_type." ".$search_cat." and p.display_product = '1' and p.products_status = '1' ".$duration." ".$product_type." ".$price_range." order by p.products_date_added DESC, p.products_name";
}

たとえば、データベースで利用可能な「Indifi」を検索すると、Indifiのglobal_category_id値は3になります。

var_dumpedの結果からわかるように、global_category_idは15であるため、「Indifi」は表示されませんが、表示されます。

私のクエリの問題は何ですか?

4

2 に答える 2

0

ここで角かっこを使用してみてください:

...where (p.products_name like '%indifi%' 
or p.products_description like '%indifi%')
and s.countries_id = '168'
... 

OR一緒にやりすぎないように。

于 2012-10-15T10:29:40.347 に答える
0
where p.products_name like '%indifi%' OR p.products_description like '%indifi%' and s.countries_id = '168' and global_category_id = '15' and p.display_product = '1' and p.products_status = '1'

そこにORあるので、もしそうならp.products_name like '%indifi%'、何でも構いませんglobal_category_id

優先順位を修正するには、括弧を使用します(... OR ...)

于 2012-10-15T10:30:04.797 に答える