如何从一个下拉菜单的两个表中获取数据

时间:2014-03-28 09:08:15

标签: php mysql

我有两个数据库表,如下所示:

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>';

但我还要在列表中添加name表中与每个位置banners匹配的banner_id。所以我可以用$row['name']

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用JOINS获取两个表的相应标题名称 与选择横幅一样。,locations。其中locations.banners = banner.id

答案 2 :(得分:0)

这是mysql查询,它将执行所需的结果。