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

PHPとMySQLでプログラムを作っています。
<slect name=”var”>
<option value=”a”>a
<option value=”b”>b
<option value=”c”>c
<option value=”*”>すべて
</select>
<slect name=”hoo”>
<option value=”い”>い
<option value=”ろ”>ろ
<option value=”は”>は
<option value=”*”>すべて
</select>
というようにhtmlをかき、varとhooの二つの条件を重ねてAND条件にしたいと思っています。
すべてというのはどうやって書けば良いでしょうか。

●質問者: takeuchi_k
●カテゴリ:コンピュータ
✍キーワード:HTML MySQL name PHP SELECT
○ 状態 :終了
└ 回答数 : 8/8件

▽最新の回答へ

1 ● esseesse
●14ポイント

http://www.hatena.ne.jp/1098698728#

PHPとMySQLでプログラムを作っています。 <slect name=”var”> <option value=”a”>a <option value=”b”>b <option value=”c”>c <option value=”*”>すべ.. - 人力検索はてな

URLはダミーで失礼します。

MySQLに渡すSELECT文をどう書けばいいのかを知りたいということで質問を理解しましたが、間違っていたらすみません。

「全て」の場合はWHERE句に条件を入れなければいいだけです。

・*がない場合の例

SELECT * FROM table WHERE hoo=’い’ AND var=’い’

・varのみ*の場合の例

SELECT * FROM table WHERE hoo=’い’

・fooのみ*の場合の例

SELECT * FROM table WHERE var=’い’

・両方とも*の場合

SELECT * FROM table

質問の趣旨が違いましたらごめんなさい。

◎質問者からの返答

ありがとうございます。

分かりにくい質問ですいません。

$sql=”select * from table var=$var and foo=$foo;

といったSQL文を作成することになるのですが、

「varまたはfooですべてを選んだ場合はAND条件を無効にする」という作業をスマートにやる方法はないだろうか、ということです。

if ( $foo == null and $var != null ) {

$sql=( ”select ... var=$var

} else if { ...

なんてふうにif文で分ければいいのでしょうけど、少しどんくさい感じがして。

$


2 ● takasiym
●14ポイント

http://www.amazon.co.jp/exec/obidos/ASIN/4881359770/249-9544399-...

Amazon.co.jp: MySQL徹底入門―ウェブに最適な高速フリー・データベース・サーバー: 本: 日本MySQLユーザー会,とみた まさひろ,Soft Agency

上記はMySQL入門書です。

varとhooがDB内のテーブル「tbl_a」のフィールドとして定義されていると仮定します。

「varとhooの二つの条件を重ねてAND条件にしたい」を、

「varとhooの二つの”検索”条件を重ねてAND条件にしたい」

と読み替えますと、

求めるphpスクリプトは、だいたい以下のようになります。

# 動かなかったらゴメンなさい。

=======================================================

<?php

$con=mysql_connect(”servername”,”username”,”password”);

if($var==”*”) {

if($hoo==”*”) {

$hResult=mysql_query(”select var, hoo from tbl_a”);

}

else {

$hResult=mysql_query(”select var, hoo from tbl_a where hoo like $_POST[hoo]”);

}

}

elseif($hoo==”*”) {

$hResult=mysql_query(”select var, hoo from tbl_a where var like $_POST[var]”);

}

else {

$hResult=mysql_query(”select var, hoo from tbl_a where var like $_POST[var] and hoo like $_POST[hoo]”);

}

while($row=mysql_fetch_array($hResult)) {

$vars[]=$row[var];

$hoos[]=$row[hoo];

}

mysql_free_result($hResult);

mysql_close($con);

?>

=======================================================

varとhooが両方すべての場合のsql文は5行目、

varのみがすべての場合のsql文は8行目、

hooのみがすべての場合のsql文は12行目、

すべてという条件がない場合のsql文は15行目になります。

検索結果は、配列変数$vars、$hoosにそれぞれ格納されます。

◎質問者からの返答

ありがとうございます。

やはり、if文でsql文そのものの構造を分けていくのですね。


3 ● takasiym
●14ポイント

http://www.hatena.ne.jp/1098698728##

PHPとMySQLでプログラムを作っています。 <slect name=”var”> <option value=”a”>a <option value=”b”>b <option value=”c”>c <option value=”*”>すべ.. - 人力検索はてな

間違えました。

文字列内に配列変数を埋め込めない仕様になっている事に留意していませんでした。

すみません。

この回答についてのポイントは不要です。

=======================================================

<?php

$con=mysql_connect(”servername”,”username”,”password”);

if($var==”*”) {

if($hoo==”*”) {

$hResult=mysql_query(”select var, hoo from tbl_a”);

}

else {

$hResult=mysql_query(sprintf(”select var, hoo from tbl_a where hoo like %s”, $_POST[hoo]));

}

}

elseif($hoo==”*”) {

$hResult=mysql_query(sprintf(”select var, hoo from tbl_a where var like %s”, $_POST[var]));

}

else {

$hResult=mysql_query(sprintf(”select var, hoo from tbl_a where var like %s and hoo like %s”, $_POST[var], $_POST[hoo]));

}

while($row=mysql_fetch_array($hResult)) {

$vars[]=$row[var];

$hoos[]=$row[hoo];

}

mysql_free_result($hResult);

mysql_close($con);

?>

=======================================================

varとhooが両方すべての場合のsql文は5行目、

varのみがすべての場合のsql文は8行目、

hooのみがすべての場合のsql文は12行目、

すべてという条件がない場合のsql文は15行目になります。

検索結果は、配列変数$vars、$hoosにそれぞれ格納されます。

◎質問者からの返答

ご丁寧にありがとうございます。


4 ● html1983
●14ポイント

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_k04.htm

SQL 基礎編 (その四) データ照会 select、where、group by、order by - SAK Streets

すべてが選ばれたフィールドについてのwhere句を生成しないようにすれば、よろしいのではないでしょうか。

◎質問者からの返答

varやfooの値に”*”が指定できれば、

select * from table where var=* and foo=*;

というようになって、スマートに実現できるかと思ったのですが、うまくいきませんでした。


5 ● esseesse
●14ポイント

http://www.hatena.ne.jp/1098698728

PHPとMySQLでプログラムを作っています。 <slect name=”var”> <option value=”a”>a <option value=”b”>b <option value=”c”>c <option value=”*”>すべ.. - 人力検索はてな

>作業をスマートにやる方法はないだろうか

とのことなので、その方針で。

$varと$hooにはすでに展開済みという条件の下。

$sql = ”select * from table”;

$where = ””;

if($hoo != ”*”) {

if($var != ”*”) {

$where = ” WHERE hoo=’”+$hoo+”’ AND $var=’”+$var+”’”;

} else {

$where = ” WHERE $var=’”+$var+”’”;

}

} else {

if($var != ”*”) {

$where = ” WHERE hoo=’”+$hoo+”’”;

}

}

$sql += $where;

で、$sqlが状態によって4パターンになります。

◎質問者からの返答

ありがとうございます。


1-5件表示/8件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



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