- 締切済み
1つのSELECTで同時に2種類のデータを調べたい
500のデータがあります。 1つのデータには、試験1の得点と組が必ずあります。 試験2はある場合とない場合があります。 ない場合はNULLを格納しています。 SELECTで選んで絞込表示させたいです。 試してみたのですが、上手にできませんでした。 ご教示をいただけないでしょうか。 よろしくお願いします。 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title></title> <?php $tokuten = $_GET["tokuten"]; $kumi = $_GET["kumi"]; $selectData = "SELECT * FROM test WHERE 1"; $selectData .= " AND {$t1} <= {$tokuten} AND {$k1} <= {$kumi} AND {$t2} <= {$tokuten} AND {$k2} <= {$kumi}"; $mmm = mysql_query($selectData,$mysql);; $table = "<table>"; while($rrr = mysql_fetch_array($mmm)){ $t1 = $rrr["t1"]; //試験1の得点 $k1 = $rrr["k1"]; //組1の得点 $t2 = $rrr["t2"]; //試験2の得点 $r2 = $rrr["r2"]; //組2の得点 if ( is_null($t2) ) { $td = ""; } else { $td = "<td>試験2の得点</td><td>$t2</td><td>試験2の組</td><td>$k2</td>"; } $table .= "<tr><td>試験1の得点</td><td>$t1</td><td>試験1の組</td><td>$k1</td>{$td}</tr>"; } $table .= "</table>"; ?> </head> <body> <form name="formName" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 得点 <select name="tokuten"> <option value="0">0点</option> <option value="25">25点以下</option> <option value="50">50点以下</option> <option value="75">75点以下</option> <option value="100">100</option> </select> 組 <select name="kumi"> <option value="A組">A組</option> <option value="B組">B組</option> <option value="C組">C組</option> </select> </form> <div id="bbb"><?php echo $table; ?></div> </body> </html>
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- yuu_x
- ベストアンサー率52% (106/202)
<?php // 初期値ぐらい設定する $tokuten = isset($_GET["tokuten"]) ? $_GET['tokuten'] : 0; $kumi = isset($_GET["kumi"]) ? $_GET['kumi'] : 'A組'; $sql =<<<__SQL__ SELECT * FROM test WHERE 1 AND :t1 <= :tokuten AND :k1 <= :kumi AND :t2 <= :tokuten AND :k2 <= :kumi __SQL__; // 直接突っ込むような雑なことはせずなるべくプリペアドステートメントを用いる $sth = $pdo->prepare( $sql ); $sth->execute( array(':t1'=>$t1, ':t2'=>$t2, ':k1'=>$k1, ':k2'=>$k2, ':tokuten'=>$tokuten, ':kumi'=>$kumi) ); $result = $sth->fetchAll( PDO::FETCH_ASSOC ); ?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title></title> </head> <body> <!-- form の下には、ブロックレベル要素しか置けない --> <!-- action に PHP_SELF を突っ込むようなことはしない。通常 SCRIPT_NAME を用いる --> <form name="formName" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>"> <fieldset> <label for="tokuten">得点<label> <select name="tokuten" id="tokuten"> <option value="0" selected="selected">0点</option> <option value="25">25点以下</option> <option value="50">50点以下</option> <option value="75">75点以下</option> <option value="100">100</option> </select> <label for="kumi">組</label> <select name="kumi" id="kumi"> <option value="A組" selected="selected">A組</option> <option value="B組">B組</option> <option value="C組">C組</option> </select> <fieldset> </form> <div id="bbb"> <table> <? foreach( $result as $r ) : ?> <tr> <td>試験1の得点</td> <td><?=htmlentities( $r['t1'], ENT_QUOTES, 'UTF-8')?></td> <td>試験1の組</td> <td><?=htmlentities( $r['k1'], ENT_QUOTES, 'UTF-8')?></td> <? if( !is_null($r['t2']) ) : ?> <td>試験2の得点</td> <td><?=htmlentities( $r['t2'], ENT_QUOTES, 'UTF-8')?></td> <td>試験2の組</td> <td><?=htmlentities( $r['k2'], ENT_QUOTES, 'UTF-8')?></td> <? endif; ?> </tr> <? endforeach; ?> </table> </div> </body> </html> 質問とは関係ない内容だが、 とりあえず質問では、何をどうしたいのかが汲み取れない。 もう少し具体的に記入していただかないと答えようがありません。