如何构建最有效的MySQL查询

时间:2013-04-01 16:44:08

标签: php mysql

我想知道是否有人可以帮助我找到从两个具有公共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次?

我不确定我是否已经充分发挥了作用,但我们将不胜感激任何帮助:)

1 个答案:

答案 0 :(得分:1)

确保两个表都有适当的索引

SELECT customers.name,
       messages.*
  FROM customers
  LEFT JOIN messages
         ON messages.customer_id = customers.id
 WHERE customers.id = 123