如何连接三个表并显示结果?

时间:2016-07-22 22:30:10

标签: php mysql join echo

我正在尝试了解如何加入和显示来自三个表的数据,并创建了这三个列出人(person),水果类型(fruit)以及人们喜欢的水果(favs)

 Person               Fruit                 Favs

id  |  name        id  | type        id |  person_id  |  fruit_id

1   |  Peter        1  | apple       1  |  Peter      |  orange
2   |  Sue          2  | orange      2  |  Sue        |  apple
3   |  John         3  | banana      3  |  John       |  banana
4   |  Mary                          4  |  Peter      |  apple
                                     5  |  Sue        |  orange

我的目标是学习如何加入所有三个表并显示人们喜欢哪些水果(如果有的话)。 就像这样:

Peter  | orange, apple
Sue    | apple, orange
John   | banana
Mary   |

我只是想了解如何连接所有三个表来显示上面的数据,但真正让我困惑的是如何回应结果。我应该使用嵌套的while循环还是foreeach循环?我很困惑,真的很感谢有人给我指路。 我最接近的就是这个(我知道的很远)。

<?php

$sql="SELECT person.name, favs.fruit_id 
      FROM person LEFT JOIN favs
      ON person.name = favs.person_id
      ORDER by person.id";

$result_set=mysql_query($sql);

while($row=mysql_fetch_array($result_set))
{
    echo $row['name'];
    echo $row['fruit_id'];
    echo '<br />';
}

2 个答案:

答案 0 :(得分:1)

在你的表示例数据中,我假设你在表格 Favs 中放置了名称以便于阅读,它不是ID本身。假设使用GROUP_CAT就是这种情况,您的SQL语句将是:

SELECT p.name, GROUP_CONCAT(ft.name)
FROM favs f
INNER JOIN fruit ft ON ft.id = f.fruit_id
LEFT JOIN person p ON p.id = f.person_id
GROUP BY f.person_id

答案 1 :(得分:-1)

就这样做:

SELECT Person.id,Fruit.name FROM Person INNER JOIN Person.id=Fruit.person_id WHERE ...