我想从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}}。
答案 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)
由于id
是ambiguous
字段,因此在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