PHP+MySQLで、複数の検索項目があります。
それぞれの項目とフィールドは、一対での検索になります。
検索1 入力欄=$a
検索2 入力欄=$b
検索3 入力欄=$c
上記みたいな検索項目があります。
複数検索で、select * db where a=$a and b=$b and c=$c and ~
と設定しています。(a,b,cはフィールド名)
この方式での検索だと、3つの項目にそれぞれ何か入っていないと
表示されません。(検索時に空白があると、表示されません。 )
空白があっても、検索されるようにするにはどうしたらいいでしょうか。
それとも、たくさんの条件設定(aが空白の場合など)が必要でしょうか。
ご教授ください。
No.3ベストアンサー
- 回答日時:
10項目もあるのでしたら、またさらに増えるかも知れないのでしたら、WHERE句の生成ではループ処理をしたらいいと思います。
ループ処理のためには $a $b $c では都合がよくないので $a[x] のような配列に転送しておく必要があります。
それと、もしどの項目も設定されていない場合に全件を対象で参照するのか、1億件もデータがあったら困りますので、どれか1つは入力するようなチェックをするか、LIMITを使って1度に参照する件数を制御した方がいいと思います。
No.2
- 回答日時:
入力フォームはあるんですよね?
だったらissetは、常にtrueになってしまうんで・・・
使うんでしたら、!emptyでしょうね。
それは、ともかく・・・
SELECT * FROM テーブル名
WHERE ({$a} = "" OR a = {$a})
AND ({$b} = "" OR b = {$b})
AND ({$c} = "" OR c = {$c});
では、どうでしょう?
もし、$a、$b、$cが全部空白のとき、全件ならこのまま。
もし、$a、$b、$cが全部空白のとき、一件もいらないなら、PHPで判断して、SQLなんか最初から発行しない。
ありがとうございました。
これでやってみたのですが、{$a} = ""のとき、
やはり検索できませんでした。
考え方が参考になりました!
No.1
- 回答日時:
ポイントが2点。
1)データがあるかどうかひとつずつチェックが必要なこと
2)すべてが空だった場合は検索しないということ
総じてこんな感じ
<?
$sql="select * db where 1";
if(!(isset($a) or isset($b) or isset($c))) $sql.=" and 0";
if(isset($a)) $sql.=" and a='{$a}'";
if(isset($b)) $sql.=" and b='{$b}'";
if(isset($c)) $sql.=" and c='{$c}'";
print $sql;
?>
where 1というのはすべて表示するということ。
$a、$b、$cのすべてがセットされていない場合は1 and 0つまり
一つもヒットしなくなります。
$a、$b、$cのどれかがセットされていればそれぞれ検索ワードが
設定されます。
回答ありがとうございます。
やはり、条件を指定していかないといけないのですね。
現在10項目あるので、それぞれのパターンを作らないといけないですよね・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access 複数条件検索の設定が上手く行きません 1 2022/07/22 20:37
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) VBAチェックボックスで有効無効切り替えできるように 5 2022/10/21 16:13
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- Windows 10 Not kind:Folders 3 2023/05/03 12:44
- ライフスタイル・ヘルスケア URLを開くアプリが見つかりません 2 2022/09/16 12:09
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(スマートフォン・携帯電話・VR) Googleアカウントを管理 について 2 2023/03/14 20:59
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLローダーCSV取込で、囲み文...
-
2回実行のSQL文を1回にしたい
-
テーブルの最後(最新)のレコー...
-
int型フィールドにnullを登録で...
-
BLOBやCLOBのパフォーマンスを...
-
SELECTした合計値をそのまま割...
-
特定のフィールドにデータが入...
-
ファイルメーカー10で重複デー...
-
一つのフィールドに複数の情報...
-
最大値が抽出できない!
-
【MySQL】 DECIMAL(2,1) に 13...
-
複数フィールド対してLIKE '% ...
-
MySQLでの近似値順での値の取得...
-
ExcelデータをACCESSへエキスポ...
-
テーブルのフィールドの一番長...
-
配列に指定した値が含まれてい...
-
Null値件数をカウントする式に...
-
select文の実行結果に空白行を...
-
where句中のtrim関数について
-
<SQL>重複しているデータの場合...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLローダーCSV取込で、囲み文...
-
テーブルの最後(最新)のレコー...
-
int型フィールドにnullを登録で...
-
テーブルのフィールドの一番長...
-
2回実行のSQL文を1回にしたい
-
SELECTした合計値をそのまま割...
-
配列に指定した値が含まれてい...
-
固定長データのテキストファイ...
-
BLOBやCLOBのパフォーマンスを...
-
入力データの半角スペースと全...
-
ACCESSのクエリで空白以降を別...
-
Null値件数をカウントする式に...
-
ファイルメーカーのフィールド...
-
MySQLでの近似値順での値の取得...
-
【MySQL】 DECIMAL(2,1) に 13...
-
ファイルメーカー10で重複デー...
-
CSVからNULL値をインポート
-
NULLの挿入の仕方が…?
-
一つのフィールドに複数の情報...
-
重複しないデータのみを抽出
おすすめ情報