人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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;";

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

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

●質問者: yossui_coll
●カテゴリ:インターネット ウェブ制作
✍キーワード:Area Key MySQL name PHP
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● KUROX
●23ポイント

$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%'";

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

◎質問者からの返答

ありがとうございます。

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

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

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


2 ● chuken_kenkou
●23ポイント

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

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



(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...

◎質問者からの返答

ありがとうございます。

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

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

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


3 ● chuken_kenkou
●22ポイント

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

ないでしょう。

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

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

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

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

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

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

思います。

◎質問者からの返答

ありがとうございます。

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


4 ● b-wind
●22ポイント

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

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


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

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

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ