dポイントプレゼントキャンペーン実施中!

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が空白の場合など)が必要でしょうか。

ご教授ください。

A 回答 (3件)

10項目もあるのでしたら、またさらに増えるかも知れないのでしたら、WHERE句の生成ではループ処理をしたらいいと思います。


ループ処理のためには $a $b $c では都合がよくないので $a[x] のような配列に転送しておく必要があります。
それと、もしどの項目も設定されていない場合に全件を対象で参照するのか、1億件もデータがあったら困りますので、どれか1つは入力するようなチェックをするか、LIMITを使って1度に参照する件数を制御した方がいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

最終的には、配列で行わなかったのですが、制御の考え方が参考になりました!

お礼日時:2008/08/18 18:36

入力フォームはあるんですよね?


だったら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なんか最初から発行しない。
    • good
    • 0
この回答へのお礼

ありがとうございました。

これでやってみたのですが、{$a} = ""のとき、
やはり検索できませんでした。

考え方が参考になりました!

お礼日時:2008/08/18 18:38

ポイントが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のどれかがセットされていればそれぞれ検索ワードが
設定されます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

やはり、条件を指定していかないといけないのですね。

現在10項目あるので、それぞれのパターンを作らないといけないですよね・・・

お礼日時:2008/08/05 14:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す