Php 如何构造最高效的MySQL查询

Php 如何构造最高效的MySQL查询,php,mysql,Php,Mysql,我想知道是否有人能帮我找到从两个具有公共ID的表中提取数据的最有效方法 一个简单的例子是,我有两个表;具有以下字段的客户和邮件: 客户 -身份证、名、姓 消息 -客户标识,消息 这种关系是customer表只有一个具有唯一id的条目,但是messages表可以为每个客户提供多条消息 在PHP页面上,我想在页面顶部显示客户名称,然后显示该客户的所有消息 目前,我使用两个查询,如下所示: $q1 = mysql_query("SELECT * FROM customers WHERE id='123

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


我不确定我在这方面是否有充分的意义,但如果有任何帮助,我们将不胜感激:)

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

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

谢谢你,马克!那么,我将如何在PHP中回应这一点?是$row['messages.message']吗?