MySQLのデータをPHPで絞り込み検索
MySQLに入力したデータをPHPで検索する際、formのcheckboxなどで絞りこみたい事があるかと思います。そんな時に役立つかも知れないメモ。
以下の内容は、筆者がPHPを始めた頃に書いたモノなので、手法としては間違っている可能性があります。
HTMLサンプル
<form action="/search.php" method="post"> <!-- checkboxの値を配列で取得 --> <input name="key[]" value="KEY1" type="checkbox" /> <input name="key[]" value="KEY2" type="checkbox" /> <input name="key[]" value="KEY3" type="checkbox" /> <input name="key[]" value="KEY4" type="checkbox" /> <input name="key[]" value="KEY5" type="checkbox" /> <p><input value="検索開始" type="submit" /></p> </form>
PHPサンプル
<?php
$sql = "SELECT 対象カラム FROM テーブル WHERE ";
// 配列の中身をSQLに整形
foreach ($_POST['key'] as $key => $val) {
if ($key === 0) $sql.= $val . "='1'";
else $sql.= " and " . $val . "='1'";
}
// SQL実行
$res = mysql_query($sql) or die(mysql_error());
// 結果をリスト化して変数に入れる
$resList = "";
while ($row = mysql_fetch_array($res)) {
$resList.= '<li>' . $row['NAME'] . '</li>' . PHP_EOL;
}
// 結果を出力
echo '<ul>' . PHP_EOL;
echo $resList;
echo '</ul>' . PHP_EOL;
?>
実行結果
チェックしたKEY(x)カラムの値が1のレコード(のNAMEカラムの値)がリスト化される。
$row['NAME']の部分は環境によって変更して下さい。
まとめ
配列を使った単純な絞込検索です。サンプルは不動産検索などのオプション検索に使えそうな感じですね。
配列を使わずにif構文などを用いて個別にSQL文を増やす事で、検索の幅はどんどん広がるかもしれません。
SQLに関しての知識が乏しい為、他にもっと良い方法があるかも知れません。参考までに。