2017-04-03 90 views
-1

我的mySQL数据库中有三个表。简单地说,他们是mySQL查询加入3个表

CREATE TABLE hotel (
h_id 
) 

CREATE TABLE amenities_map (
am_id, 
h_id, 
amenity_id, 
amenity_text 
) 

CREATE TABLE amenities (
amenity_id, 
amenity_name, 
amenity, 
amenity_text 
) 

使用这些表我能够在酒店列表中显示的设施,以在每个设施变量的数字。现在我需要创建一个管理页面来添加,更改和删除每家酒店的设施。

我已经开始与设施表的简单查询:

$query_amenities = "SELECT * FROM amenities ORDER BY amenity_id ASC"; 

,让我打造出所有可能的设施的表。

<?php while ($row_amenities = $amenities->fetch_assoc()) {?> 
<tr> 
<td><?php echo $row_amenities['amenity_name'] ?></td> 
<td><input type="checkbox" name="amenity[]" value="<?php echo $row_amenities['amenity'] ?>" <?php echo $chk_allinc ?>></td> 
<td><input name="amenity_text[]" type="text" value="<?php echo $row_amenities['amenity_text'] ?>" disabled> 
<input type="hidden" name="amenity_id" value="<?php echo $row_amenities['amenity_id'] ?>"></td> 
</tr> 

我可以找出哪些离店有酒店与

$query_amenities2 = "SELECT amenity_id, amenity_text FROM amenities_map WHERE h_id='$h_id'"; 

现在,这里就是我会被卡住。如果在amenities2查询中出现amenity_id,则需要在表中使用该amenity_text值代替第一个值。 (我还需要将相关复选框标记为“已选中”)。我不想将“amenities2”查询放入“where”循环中,因为这会使其运行约30次。有没有办法将它整合到“设施”查询中?也许以某种方式使用JOIN?

+0

表现出你希望摆脱这种什么样。在我看来,您可能需要真正查看如何在sql – Takarii

回答

1

SQL:

SELECT a.amenity_id, a.amenity_name, a.amenity, coalesce(m.amentiy_text, a.amenity_text) as amenity_text 
    , case when m.h_id is NULL THEN '' ELSE 'checked' END as Checked 
FROM amenities a 
LEFT JOIN amenities_map m on m.amenity_id = a.amenity_id 
WHERE m.h_id = '$h_id' 
ORDER BY amenity_id ASC 

我只知道一点点PHP,但在这里$h_id值看起来很像是危险的容易受到SQL注入式攻击。确保你使用了准备好的语句。

PHP:

<?php while ($row_amenities = $amenities->fetch_assoc()) {?> 
<tr> 
    <td><?php echo $row_amenities['amenity_name'] ?></td> 
    <td><input type="checkbox" name="amenity[]" value="<?php echo $row_amenities['amenity'] ?>" <?php echo $row_amenities['Checked'] ?>></td> 
    <td><input name="amenity_text[]" type="text" value="<?php echo $row_amenities['amenity_text'] ?>" disabled> 
     <input type="hidden" name="amenity_id" value="<?php echo $row_amenities['amenity_id'] ?>"></td> 
</tr> 
<?php } ?> 
+0

中使用连接这真是太棒了。我花了一点时间了解你在那里做了什么,现在已经教会了我更多关于mySQL的知识。我必须做的唯一事情就是删除WHERE行,因为这会限制查询仅限于已选择的值。 不用担心sql注入漏洞:我只是试图以最简单的方式将其呈现给StackOverflow。 – TrapezeArtist