プログラム初心者です
検索機能をつける方法を教えてください
質問1
like検索のLIKE “%value%”でもインデックスを使う方法はありますか?それともインデックスを使わなくても十分速いのでしょうか?
質問2
複数キーワードをスペースをはさんで検索してきた場合、どうやって処理すればいいのでしょうか?
and検索のみです
例えばこんな文字の場合です
$search = 'ああ いい うう';
$recordSet2 = mysqli_query($link,sprintf('SELECT * FROM table where name LIKE "%%%s%%"',
$search
));
while($row = mysqli_fetch_assoc($recordSet2)){
?>
<tr>
<td><?php print $row['name']; ?></td>
</tr>
<?php
}
?>
よろしくお願いします
No.1ベストアンサー
- 回答日時:
【訂正】
前回の回答に不備がありましたので訂正します。
$result = mysqli_query($link, sprintf(
'SELECT name, mail FROM table WHERE name="%s" OR mail="%s"',
mysqli_real_escape_string($link, $name),
mysqli_real_escape_string($link, $mail)
));
while ($row = mysqli_fetch_assoc($result)) {
if ($name === $row['name']) { $name_duplicated = true; }
if ($mail === $row['mail']) { $mail_duplicated = true; }
}
if (isset($name_duplicated, $mail_duplicated)) {
throw new Exception('その名前とメールアドレスは既に登録されています');
} elseif ($name_duplicated) {
throw new Exception('その名前は既に登録されています');
} elseif ($mail_duplicated) {
throw new Exception('そのメールアドレスは既に登録されています');
}
として最大で2件チェックするようにしないと正しい結果が得られる保証がありません。
【回答1】
「LIKE がワイルドカードキャラクタで始まらない定数文字列の場合、インデックスはLIKE比較にも使用できます。」とMySQL公式マニュアルにあるので、裏を返せば「%value%」ではインデックスは使えないということです。
【回答2】
実はこっちでサラっと解説してますw
http://qiita.com/mpyw/items/b00b72c5c95aac573b71 …
「q」という名前でフォームから受け取るとすると下記のようなソースになります。
(ネスト多いので全角スペースでインデントしました)
if (isset($_REQUEST['q']) && is_string($_REQUEST['q'])) {
$regex = "/[\\x0-\x20\x7f\xc2\xa0\xe3\x80\x80]++/u";
if ($keywords = preg_split($regex, $_REQUEST['q'], -1, PREG_SPLIT_NO_EMPTY)) {
foreach ($keywords as &$keyword) {
$keyword = sprintf("`name` = '%s'", '%' . addcslashes($keyword, '\\_%') . '%');
}
unset($keyword);
$result = mysqli_query($link, 'SELECT * FROM `table` WHERE ' . implode(' AND ', $keywords));
}
}
while(isset($result) and $row = mysqli_fetch_assoc($result)){
?>
<tr>
<td><?php print $row['name']; ?></td>
</tr>
<?php
}
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Android(アンドロイド) Pixelのレコーダーで文字起こしした英文を検索する方法 4 2022/10/21 07:45
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
- ・ちょっと先の未来クイズ第5問
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA で、スペースを含むファイ...
-
検索機能
-
セキュリティーを意識した書き方。
-
ポインタ配列をfscanfで読み込...
-
アップロードファイル名の文字化け
-
array_multisortがうまくできま...
-
初心者です。入力フォームのp...
-
PHP ボタンが押されたら処理を...
-
パラメーターを隠す
-
laravelを利用してコントロール...
-
<input type="hidden" >で配列...
-
テキストボックスに初期値を入れる
-
php sprintfの中で、ifのような...
-
HTMLで前の画面に戻る時、入力...
-
フォーム送信後の更新ボタンで...
-
チェックボックスによる検索(...
-
DOMNodeのtextContentで日本語...
-
PHPのエラーの解消法について教...
-
ドロップダウンで送信先を変更...
-
DBの値をチェックボックスに反...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Flaskでサーバー立ち上げに関して
-
VBA で、スペースを含むファイ...
-
PHPからHTMLへの変数の受け...
-
phpで変数を使ってcopyできない
-
プログラミングC++のmapについて
-
POSTの項目に追加
-
アップロードファイル名の文字化け
-
サブフォルダ内の全てのテキス...
-
MySQL,PHPのリロードによる二重...
-
複数条件での検索について教え...
-
php+mysqlでの重複チェックにつ...
-
$_SESSIONに渡した後はそのまま...
-
アップロードしたファイルの絶...
-
ログイン パスワード変更のプ...
-
PHP&MySQL fetchAll()でデータ...
-
セキュリティーを意識した書き方。
-
foreachがうまく動かない
-
テキストボックスの値を取得したい
-
ファイルアップローダーで送信...
-
phpで読み込んだcsvが文字化け...
おすすめ情報