如何在mysql(LEFT JOIN)中连接两个不同表中的数据?

时间:2015-10-27 11:18:50

标签: php mysql

我想从mySQL数据库连接两个不同表的数据。这很好用,但我有一个小问题:

 $sql = "SELECT  *  FROM person h LEFT JOIN animals o ON ( o.name = h.name);" ;

person

| id | name | age |
|----|------|-----|
| 1  | fred |  9  |   
| 2  | tom  |  8  |  
| 3  | kim  |  6  |   

animals

| id | name | animal |
|----|------|--------|
| a  | fred |  cat   |   
| b  | tom  |  frog  |  
| c  | kim  |  dog   | 

所以对于这个循环......

foreach ($pdo->query($sql) as $row) {
echo "$row['id']"; 
echo "$row['animal']"; 
}

......我得到了结果:

| a  |  cat  |   
| b  |  frog |  
| c  |  dog  | 

但我实际需要的结果是

| 1  |  cat  |   
| 2  |  frog |  
| 3  |  dog  | 

所以我需要来自animals的关联数据,但仍保留id的{​​{1}}。

4 个答案:

答案 0 :(得分:2)

只需更改返回值

即可
"SELECT  person.id id, animals.animal animal FROM person h LEFT JOIN animals o ON ( o.name = h.name);"

这将返回您想要的2个值。如果您需要更多列,只需添加它们。

答案 1 :(得分:1)

您需要从person而不是animals获取ID字段。

获取单独的ID field

$sql = "SELECT  *, h.id as pid  FROM person h
LEFT JOIN animals o ON o.name = h.name";

PHP的变化:

foreach ($pdo->query($sql) as $row) {
  echo $row['pid']; 
  echo $row['animal']; 
}

答案 2 :(得分:1)

如果您使用的是联接查询,请使用MySQL: ALIASES表名称

$sql = "SELECT  *, pr.id as personId  FROM person pr LEFT JOIN animals al ON al.name = pr.name";


foreach ($pdo->query($sql) as $row) {
echo "$row['personId']"; 
echo "$row['animal']"; 
}

答案 3 :(得分:1)

由于idambiguous字段,因此在array having same key than last will overwrite the first内,因此您需要单独识别这些密钥,如

SELECT h.id as pid,*  FROM person h
LEFT JOIN animals o ON o.name = h.name