PHPとMysqlで質問です。

Yahoo!のようなキーワード検索フォームから検索を行った場合に、
下記カラムの「名前」~「備考」までを検索範囲としたいと思っています。

▼カラム
名前 name
住所 area
特徴 toku
備考 nanka
血液 type
PR prpoint

この場合どのようなソースの書き方になるのでしょうか?
下記のようなものをいろいろ試したのですが、結果上手く行きません。。。
WHEREの後の書き方だったりするんでしょうか?

$key = htmlspecialchars($_POST["submit"], ENT_QUOTES);
$where = " WHERE ****** Like '%$key%'";
$csql = "SELECT name,area,toku,nanka FROM humantable $where;";

単純に、こんな書き方じゃなくてもこんなのもアル!というのもお待ちしています。
あとこの辺の事が詳しい書籍なんかありましたら教えて
つかあさい。

どうかご教授宜しくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/02/08 21:55:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:KUROX No.1

回答回数3542ベストアンサー獲得回数140

ポイント23pt

$where = "Where name like '%$key%' or area like '%$key%' or toku like '%$key%' or nanka like '%$key%' or type like '%$key%' or prpoint like '%$key%'";

はずしてるかもわかりませんが・・。

id:yossui_coll

ありがとうございます。

エラーにはならないのですが、検索結果が出てこないようです。

実は試したものだったのですが、検索プログラムで普通このような書き方に

なるものなのか、ちょっと疑問だったりもしてます。

2008/02/01 22:15:46
id:chuken_kenkou No.2

回答回数722ベストアンサー獲得回数54

ポイント23pt

そんな操作をやろうと思ったら、インデクスを使えず、母体件数に比例して性能劣化しますよ?

趣味の範囲ならいいですが、仕事がらみならやるべきではありません。



(1)方法1<文字連結する>・・・最悪のやりかた

where concat_ws(0x0000,name,area,toku,nanka) Like '%$key%'


(2)方法2<or 条件にする>・・・(1)よりはまだいいかも。

where name Like '%$key%'
     or area Like '%$key%'
    or toku Like '%$key%'
    or nanka Like '%$key%'


(3)方法3

MoSQLを利用

http://mosql.jp/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E...

id:yossui_coll

ありがとうございます。

あくまで趣味です。とても仕事にはできません。。

なにか、ものすごく間違った事をやろうとしているのではないかと思ってきました。

単純に、データの中から検索の必要があるカラムを見て表示させたいだけなんです。

2008/02/01 22:26:48
id:chuken_kenkou No.3

回答回数722ベストアンサー獲得回数54

ポイント22pt

母体件数件数が相当に少ない(数百件~数千件くらい)なら、インデクスを使わなくても大きな問題は

ないでしょう。

しかし、数万、数十万といった母体から、データを抽出しようと思うと、インデクスを使えないと母体件数に

比例して性能劣化します。

インデクスを有効利用できる検索条件は、「=」条件や範囲条件、LIKEで前方一致(「列名 LIKE 'abc%'」)

などです。LIKEで%abc%'といった指定では、まったくインデクスが使われなかったり、インデクスの最下段を

すべて見るといったことになります。

今回の場合、もし前方一致にできるなら、文字連結でなく、OR条件にすればインデクスを使えると

思います。

id:yossui_coll

ありがとうございます。

今は数百件すら想定にない状態ですが、数十万というデータも問題ないプログラムができるようになりたい今日この頃です。自分の頭の中では、キーワードの検索にはLIKE必須で、文中の文字を検索するのだから%$key%でないとダメなんじゃないかと生半可な知識で思ってしまいました。

2008/02/01 23:26:35
id:b-wind No.4

回答回数3344ベストアンサー獲得回数440

ポイント22pt

取りあえず出力するだけなら LIKE でいいだろうけど、まともにやるなら、Senna 等の前文検索エンジンを使ったほうがいい。

Senna 組み込み型全文検索エンジン


一応標準機能だけで何とかする方法も無くは無い。

MySQL FULLTEXT + Ngram : LIKE検索より数十倍高速な、お手軽 日本語全文検索 について|blog|たたみラボ

id:yossui_coll

なるほど、ありがとうございます。

こういったものもあるんだなと勉強させていただきました。

ASPなどを除く、ほとんどの商業サイトでもキーワード検索(もちろんDBのデータを検索するもの)ができると思うんですが、全文検索エンジンを使用しているところが多いってことなのでしょうかね。。。

2008/02/02 10:53:25
  • id:yossui_coll
    KUROXさん、chuken_kenkouさんに書いていただいたソースで、%$key[0]%としたらデータが表示されました。ただ、根本的にその書き方間違ってるよ、こうだろ!というものもありましたら、引き続きお願いします。
  • id:KUROX
    数十万件でも耐えれると思うけど、こういうやり方はYahooとかではやってないです。
    Like検索も遅いですし・・。
    ---------
    http://builder.japan.zdnet.com/news/story/0,3800079086,20357692,00.htm
    これ使えるか不明ですが、こういったような全文検索用のものを使うほうがマシです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません