検索に使用する単語は 一つに したほうがいいですね。
たとえば 「映画 東京 スポーツ」の場合は 「映画」、「東京」、「スポーツ」の3つにわけて 3回ループして 取得する。
上記のキーワードで
[postsテーブル]
titleとcityとtxtに 対して それぞれ likeでORで pidを取得する。
[tagsテーブル]
こちらは tagで like 検索して pidを取得する。
これを 単語数繰り返して どの 単語でも 取得できた pidを 検索結果とする。
こんな感じで できますか?
▽2
●
taroe ●100ポイント ベストアンサー |
今回の場合は、
[postsテーブル]と[tagsテーブル]をJOINして
これをSQLで検索する方向で考えてみるべき
たぶん、SQL1回でOKだと思うけど。
トリッキーでなくて普通に使われる手法。
JOIN自体がトリッキーなら、方法はプログラムでがんばるしかない。
>今回の仕組みですと「映画 東京 スポーツ」の場合は最低6回のSQLが発行されます。
>(ループ3回、ループ内で2回(postsテーブルおよびtagsテーブルを対象))
>出来ればSQL発行回数を抑えたいのですが、妙案はありませんでしょうか。
>しかしトリッキーにSQLを使用するのは避けたいと思いますので、通常適用される範囲で良い案があれば教えて頂けると嬉しいです。
[postsテーブル]と[tagsテーブル]をJOINして
SQLで検索すれば、SQL発行回数は減りますが・・・。
JOINは普通の方法ですし、そんなに遅いわけでもなくて
プログラムでループしてマッチさせるより早いこともあります。
これ、データ件数とかにもよるんですね。
データ件数が多くなるほど、SQLで力尽くJOINというのは遅くなる傾向にあり
プログラムで力尽くの方がかえって早くなるということがあります。
SQLの発行回数よりも
実際の処理時間
SQL3回と
SQL6回でも
6回の方が早いことも多々ありますよ。