2014-03-28 71 views
0

我甚至不知道如何聰明地問這個問題,因此請和我一起裸照。如何從一個下拉菜單的兩個表格中獲取數據

我有2個數據庫表像這樣:

CREATE TABLE IF NOT EXISTS `banners` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(20) NOT NULL, 
    `long_name` varchar(50) NOT NULL, 
    `visible` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ; 

和:

CREATE TABLE IF NOT EXISTS `locations` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `banner_id` int(2) NOT NULL, 
    `district_id` int(2) NOT NULL, 
    `number` int(5) NOT NULL, 
    `location` varchar(50) NOT NULL, 
    `visible` tinyint(1) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=511 ; 

我用下面的代碼來拉的位置列表基於其district_id並創建一個下拉菜單:

$query = 'SELECT id, banner_id, location FROM locations WHERE district_id =' . $district_id; 

$result = mysql_query($query, $connection); 
if (!result) { 
die("Database query failed: " . mysql_error()); 
} 

while ($row = mysql_fetch_array($result)) { 
echo '<option value="' . $row['id'] . '"'; 
if($row['id'] == $location) { echo ' selected';} ; 
echo '>' . $row['location'] . '</option>'; 
} 

echo '</select>'; 

但我也想從添加到列表中表格匹配每個位置的banner_id。所以,我可以與每個$row['location']回聲出$row['name']

while ($row = mysql_fetch_array($result)) { 
echo '<option value="' . $row['id'] . '"'; 
if($row['id'] == $location) { echo ' selected';} ; 
echo '>' . $row['name'] . ' ' . $row['location'] . '</option>'; 
} 

我希望有一定的道理。任何幫助,將不勝感激。

+1

做你的查詢 – Eddie

回答

4

您需要一個JOIN查詢。請嘗試以下操作:

$query = 'SELECT l.id, l.banner_id, l.location, b.name 
      FROM locations l 
      INNER JOIN banners b ON (l.banner_id = b.id) 
      WHERE district_id =' . $district_id; 

現在,你有你的結果集都namelocation

while ($row = mysql_fetch_array($result)) { 
    echo '<option value="' . $row['id'] . '"'; 
    if($row['id'] == $location) { echo ' selected';} ; 
    echo '>' . $row['name'] . ' ' . $row['location'] . '</option>'; 
} 

編輯:圖片的標題說明

  • mysql_擴展已被棄用,你應該使用PDOmysqli_
  • 爲了防止SQL注入,您需要執行輸入過濾和/或使用參數化查詢。最快的方法是將$district_id轉換爲整數。欲瞭解更多信息,請參閱OWASP guide
+0

聯接假設這兩個表可以通過一個連接 – Darius

+0

這奏效了完全訪問。非常感謝! – Mike

+0

即使$ district_id由另一個限制用戶選擇預定值的下拉菜單生成,是否仍然需要使用參數化查詢? – Mike

0

使用JOINS序爲兩個表 像 選擇橫幅得到相應的旗號。 ,地點。 where locations.banner_id = banner.id

1

這裏是mysql查詢哪個會執行期望的結果。

$query = "select locations.id, 
       locations.banner_id, 
       locations.location, 
       banners.name, 
       banners.id 
      from locations, banners 
      WHERE banners.id=locations.banner_id 
      and district_id =" . $district_id; 
+0

我在另一種場景中使用了這個。謝謝! – Mike

相關問題