SELECT * FROM addre WHERE CONCAT(`ken`, `cit`, `num`) LIKE '%東京%' AND '%渋谷%' ORDER BY id
上記をうまく機能させるにはどう書けばいいのでしょうか?
複数の語句で検索したいのです。
こうしたらうまくなるかもしれない、やってみてください。だめだったらごめんな!
SELECT * FROM addre
WHERE CONCAT(`ken`, `cit`, `num`) LIKE '%東京%'
AND CONCAT(`ken`, `cit`, `num`) LIKE '%渋谷%'
ORDER BY id
SELECT * FROM addre WHERE CONCAT('ken', 'cit', 'num') LIKE '%東京%' AND CONCAT('ken', 'cit', 'num') LIKE '%渋谷%' ORDER BY id
LIKEは a = b の = の類のものです。
列名から、kenには県名、citには都市名が入ると推測いたしました。
CONCATは文字列を連結する関数ですが、ここでは利用する必要はないと思います。
複数の条件で検索するには、ANDを使って条件を複数指定します。
SELECT * FROM addre WHERE ken LIKE '%東京%' AND cit LIKE '%渋谷%' ORDER BY id ;
ただ、LIKEでの検索は全レコードを検索してしまう可能性が高く、処理速度に問題があることが多いです。
例えば、kenに入っている値はあいまいな検索を行う必要がないのであれば、以下のようにWHERE句にてイコールで比較をした方が良いです。
SELECT * FROM addre WHERE ken = '東京' AND cit LIKE '%渋谷%' ORDER BY id ;
このようにすると、ken列にINDEXが張ってある場合など、かなり検索速度が大幅に向上します。
citについても同様にイコールで検索した方が処理速度は向上します。
特別な事情があり、CONCATを使う必要がある場合(例えば、検索につかう文字列がどの列を対象にするのかが明確になっていない場合)、以下のようにすれば良いです。
SELECT * FROM addre WHERE CONCAT(ken, cit, num) LIKE '%東京%' AND CONCAT(ken, cit, num) LIKE '%渋谷%' ORDER BY id ;
参考になれば幸いです。
また、SQLの質問をする際には、
を説明するとより適切な回答が付くと思います。
コメント(0件)