我遇到了一个问题我有一个表单,我正试图添加一个编辑页插入到mysql中。我把所有的房间都从一张桌子上取出来,然后我要检查它们是否在另一张桌子上被“托运”。
Table 1 (HotelRooms):
ID | HotelRoom | Hid
---------------------
1 | Standard | 20
2 | Deluxe | 20
2 | Basic | 20
Table 2 (HotelPromos)
ID | Promo | Rooms | Hid
-------------------------
1 | 10% | deluxe, standard | 20
现在以我的形式,我首先需要找到所有的房间属于酒店与Hid 20。下面是我的选择声明:
<?php
$getRooms = mysql_query("SELECT HotelRoom FROM HotelRooms WHERE HotelId = '$hid'") or die(mysql_error());
$rr = 1;
$numRooms = mysql_num_rows($getRooms);
if($numRooms == 0){
echo "Lo sentimos pero no hay habitaciones registrados para este hotel. Favor de agregar habitacion para poder agregar una promocion.";
}
while($ro = mysql_fetch_array($getRooms)){
$roomName = $ro['HotelRoom'];
?>
<input type="checkbox" name="room<?php echo $rr ?>" /><?php echo $roomName ?>
<?php
$rr++;
}
?>
有人知道我如何检查HotelPromos表,看它是否在列房间下,并添加一个checked=“checked”到它吗???
任何帮助都将非常感谢!!!
最佳答案
我假设Basic的ID实际上是3而不是2,这是一个输入错误。
首先,在HotelPromo中,您应该使用房间ID(1,2),而不是名称(豪华,标准)。
其次,您应该将hotelpromotions分成两个表,以符合Database Normalization的“First Normal Form”。
是的,这是一个有点难设计,你将不得不修改你的代码,但它使复杂的查询更容易编写。
PromoCodes
ID | Promo
----------
1 | 10%
HotelPromos
RoomID | PromoID
----------------
1 | 1
2 | 1
现在你可以得到所有符合酒店标识的房间
SELECT HotelRooms.ID, HotelRooms.HotelRoom as Name, HotelPromos.PromoID
FROM HotelRooms
LEFT JOIN HotelPromos
ON HotelRooms.ID = HotelPromos.RoomID
WHERE HotelId = '$hid'
意味着我想要20号酒店的所有房间,不管他们是否有促销活动。promo ID将是promo代码的ID,如果没有可用的代码,则为
LEFT JOIN
,您可以使用它来决定是否选中该复选框。while( $ro = mysql_fetch_assoc($getRooms) ){
$roomName = $ro['Name'];
?>
<input type="checkbox" name="room<?= $rr ?>" <?php if( $ro['PromoID'] ) { echo 'checked="checked" '; } ?>/><?php echo $roomName ?>
<?php
$rr++;
}
最后一件事,我认为你应该使用
NULL
而不是一个新的变量$ro['ID']