查询两个表并选择两个字段匹配的数据

时间:2013-08-04 11:58:02

标签: php mysql

我在数据库中有两个表,一个叫牲畜,另一个说明。

Table: livestock
|    id     |      name         |     scientific        |
   (eg 1)      (eg Tree Frog)     (eg hyla marmorata)

Table 2: info
|  scientific     |     description      |
  hyla marmorata     description of h.m

我有一个动态页面,可以从livestock获取特定id

的所有内容
$id = mysqli_real_escape_string($_GET['id']);
$query = 'SELECT * FROM `livestock` WHERE `id` = ' . (int) $_GET['id'];

这一切都运行正常,但我需要从description表中获取此info表的info,但无法匹配id。原因是livestock表中的行不会出现在description表和id中,每次更新牲畜表都不一样,因为有些动物没有库存我不想每次更新livestock表时都更新scientific。但是,$query = "SELECT info.description, info.scientific, livestock.scientific ". "FROM info, livestock ". "WHERE info.scientific = livestock.scientific "; $result2 = mysqli_query($con, $query2) or die(mysqli_error($con)); $row2 = mysqli_fetch_array($result2); echo $row2['info.description']; 字段对于所需的记录始终是相同的。

我尝试了以下但是它没有用......

scientific

两个{{1}}字段都是Varchar(100)。任何帮助/指导将不胜感激。

1 个答案:

答案 0 :(得分:1)

我想你想要left outer join。这将保留livestock表中的所有行,即使是那些与info表不匹配的行:

     SELECT i.description, i.scientific, l.scientific
     FROM livestock l left outer join
          info i
          on i.scientific = l.scientific
     WHERE l.id = ' . (int) $_GET['id'];

我不确定你为什么要从两个表中提取scientific。查询已经具有它们相等的条件。您应该使用l.scientific