我想知道是否有人可以帮助我找到从两个具有公共ID的表中提取数据的最有效方法。
一个简单的例子是我有两张桌子;客户和消息包含以下字段:
客户 - id,firstname,surname
讯息 - customer_id,消息
关系是,customer表只有一个具有唯一ID的条目,但messages表可以为每个客户提供多条消息。
在PHP页面上,我想在页面顶部显示客户名称,然后显示该客户的所有消息。
目前,我正在使用以下两个查询:
$q1 = mysql_query("SELECT * FROM customers WHERE id='123'");
while($row1= mysql_fetch_assoc($q1)){
echo "$row1[firstname] $row1[surname]";
}
$q2 = mysql_query("SELECT * FROM messages WHERE customer_id='123'");
while($row2= mysql_fetch_assoc($q2)){
echo "$row2[message]";
}
这是我想要实现的简化版本,但我想知道是否有一种方法可以用一个查询来完成。我在这里搜索时看到了JOIN和UNION函数(但从未使用过它们)但是看不出这些如何允许我只显示一次所有消息的客户名称。如果这些来自一个查询并且有10条消息,则客户名称将重复10次?
我不确定我是否已经充分发挥了作用,但我们将不胜感激任何帮助:)
答案 0 :(得分:1)
确保两个表都有适当的索引
SELECT customers.name,
messages.*
FROM customers
LEFT JOIN messages
ON messages.customer_id = customers.id
WHERE customers.id = 123