2017-04-03 125 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