4

次のようなクエリがあります。

SELECT * FROM `tbl_shop` 
WHERE
  (LOWER (CONCAT(address, name)) LIKE (LOWER ('%boston%')) AND
   LOWER (CONCAT(address, name)) LIKE (LOWER('%smoke%')));

私の質問は簡単です - CONCAT(address, name) の部分を繰り返さなくてもこのコードを書く方法はありますか?

私は試した

SELECT * FROM `tbl_shop`
WHERE 
  (LOWER (CONCAT(address, name)) LIKE (LOWER ('%boston%')) AND (LOWER('%smoke%')));

しかし、これでは何の成果も得られませんでした。両方の単語を含むすべての結果が必要です。私はinno dbを使用していて、それを保持したいので、全文を使用できません。

前もって感謝します。

4

1 に答える 1

3

できるよ

SELECT b.* FROM
(
   SELECT a.*, LOWER(CONCAT(a.address, a.name)) AS field_to_check
)b 
WHERE b.field_to_check LIKE (LOWER ('%boston%')) 
 AND  b.field_to_check LIKE (LOWER('%smoke%'));

ただし、これは単なる構文糖衣であり、パフォーマンスの違いにはなりません。

于 2013-04-15T17:15:13.830 に答える