SQL文の書き方をご教授お願い致します。
<th>物件種別</th>
<td>
<input type="checkbox" name="kid[]" value="1" <?php if( $_REQUEST["kid"] == "1" ){ print( 'checked' ); } ?>/>
温泉
<input type="checkbox" name="kid[]" value="2" <?php if( $_REQUEST["kid"] == "2" ){ print( 'checked' ); } ?>/>
キャンペーン
<input type="checkbox" name="kid[]" value="3" <?php if( $_REQUEST["kid"] == "3" ){ print( 'checked' ); } ?>/>
イベント
<input type="checkbox" name="kid[]" value="4" <?php if( $_REQUEST["kid"] == "4" ){ print( 'checked' ); } ?>/>
特別室<br />
<input type="checkbox" name="kid[]" value="5" <?php if( $_REQUEST["kid"] == "5" ){ print( 'checked' ); } ?>/>
和室
<input type="checkbox" name="kid[]" value="6" <?php if( $_REQUEST["kid"] == "6" ){ print( 'checked' ); } ?>/>
喫煙室</td>
</tr>
<tr>
//まずこのSQL文でt_hotelsのテーブルとt_hotel_kodawariを結合します
$sql="SELECT t_hotels.id,t_hotels.hotel_name,t_hotels.price,t_hotels.address,t_hotel_kodawari.id,t_hotel_kodawari.kid FROM t_hotels JOIN t_hotel_kodawari USING(id) WHERE 1
";
テーブル t_hotel_kodawari
id kid
------------
1 1
1 2
1 4
2 1
2 5
3 2
4 3
4 6
5 2
5 3
6 1
7 2
テーブルt_hotels
id hotel_name price address
-----------------------------------------------------
1 Aホテル 10000 栃木県・・・
2 Bホテル 12000 栃木県・・・
3 Cホテル 9000 千葉県・・・
4 Dホテル 10000 千葉県・・・
5 Eホテル 15000 愛知県・・・
6 Fホテル 30000 東京都・・・
7 Gホテル 40000 神奈川県・・・
テーブルt_hotels とt_hotel_kodawariをJOIN USINで結合して表示
id hotel_name price address id kid
-------------------------------------------------------------------
1 Aホテル 10000 栃木県・・・ 1 1
1 Aホテル 10000 栃木県・・・ 1 2
1 Aホテル 10000 栃木県・・・ 1 4
2 Bホテル 12000 栃木県・・・ 2 1
2 Bホテル 12000 栃木県・・・ 2 5
3 Cホテル 9000 千葉県・・・ 3 2
4 Dホテル 10000 千葉県・・・ 4 3
4 Dホテル 10000 千葉県・・・ 4 6
5 Eホテル 15000 愛知県・・・ 5 2
5 Eホテル 15000 愛知県・・・ 5 3
6 Fホテル 30000 東京都・・・ 6 1
7 Gホテル 40000 神奈川県 7 2
$condition = array();
//仮にkid1が一つ選択されたら
まず
if( !empty( $_POST["kid"] )){
for($i=0; $i<count($_REQUEST["kid"]); $i++) {
$tmpKey = "kid".$i;
$sql .= " and kid = :".$tmpKey;
$condition[$tmpKey] = $_REQUEST["kid"][$i];
var_dump($sql);
}
}
で絞り込まれSQL文が作られ、
var_dump($sql);でSQL文を表示させると
string(184) "SELECT t_hotels.id,t_hotels.hotel_name,t_hotels.price,t_hotels.address,t_hotel_kodawari.id,t_hotel_kodawari.kid FROM t_hotels JOIN t_hotel_kodawari USING(id) WHERE 1 and kid = :kid0" の結果によって、
kid1を選択するとホテルA,B,Fが表示されます。
でkidがまずandで絞り込まれます。
ですが、もう二つ目選択すると
string(184) "SELECT t_hotels.id,t_hotels.hotel_name,t_hotels.price,t_hotels.address,t_hotel_kodawari.id,t_hotel_kodawari.kid FROM t_hotels JOIN t_hotel_kodawari USING(id) WHERE 1 and kid = :kid0" string(200) "SELECT t_hotels.id,t_hotels.hotel_name,t_hotels.price,t_hotels.address,t_hotel_kodawari.id,t_hotel_kodawari.kid FROM t_hotels JOIN t_hotel_kodawari USING(id)「 WHERE 1 and kid = :kid0 and kid = :kid1"」 で
-------------------------------------------
二重にand で絞られてしまい何も出てきません。希望としては二回目の選択からkidはor条件にすれば仮にkid1,kid2ホテルA,B,C,E,F,Gと両方を含む表示を実現したいのですが、
実際はSQLの表記の方法をネットや本で調べたのですが、分からない状態です。ご教授いただけたらと思います。
なお、私の希望通りの方法ではなくても実現できれば大丈夫です。
どうかよろしくお願い致します。
お礼
毎度、ありがとうございます。 yambeさんの回答はマジックみたいです。