如何连接三个表并显示结果?
我想了解如何加入并显示来自三个表的数据,并创建了这三个列表人(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 />';
}
好您的表数据。例如,我认为在表的收藏你放在名字可读性,那岂不是在标识自己。假设使用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
好吧,你很正确。你的查询是有效的(我调整了:'LEFT JOIN person p ON p.name = f.person_id'。但是为什么玛丽从结果中被省略,她没有'fav',但她仍然应该出现在它们中? – JulianJ
改变LEFT加入到右连接中,注意Mary,因为没有数据,Mary的结果将为NULL – jasonlam604
只要做到这一点是这样的:
SELECT Person.id,Fruit.name FROM Person INNER JOIN Person.id=Fruit.person_id WHERE ...
尝试GROUP_CONCAT – rjdown
看看这个http://stackoverflow.com/questions/273238/how-to-use-group-by- sql-server –
你最喜欢的表应该使用外键的ID,而不是它们的值 – Jaime