Php 如果要从两个表中提取数据,最佳做法是什么?

Php 如果要从两个表中提取数据,最佳做法是什么?,php,sql,mysql,Php,Sql,Mysql,我有两张桌子 agent(id, name, password, ..., shop_id); shop(id, name, address, ...); 现在我想为一个代理商取店名,我该怎么办? 我是否应该使用两个序列sql查询 <?php $qstr = <<<SQL SELECT * FROM agent WHERE id=$id; SQL; $result = $conn->query($qstr); $row = $result->fetch_as

我有两张桌子

agent(id, name, password, ..., shop_id);
shop(id, name, address, ...);
现在我想为一个代理商取店名,我该怎么办? 我是否应该使用两个序列sql查询

<?php
$qstr = <<<SQL
SELECT * FROM agent WHERE id=$id;
SQL;
$result = $conn->query($qstr);
$row = $result->fetch_assoc();
foreach ($row as $key => $value)
    $$key = $value;

$qstr = <<<SQL
SELECT name FROM shop WHERE id=$shop_id;
SQL;
$result = $conn->query($qstr);
$row = $result->fetch_assoc();
$shop_name = $row['name'];
?>
或者我应该使用sql

SELECT agent.id AS id ,agent.name AS name, shop.id AS shop_id, shop.name AS shop_name FROM agent, shop WHERE agent.shop_id=shop.id and agent.id=$id;
最好的方法是什么


谢谢。

如果这只是您将在前端页面中使用的特定查询,那么简单的SQL应该工作得最好。 为想要从MySQL获得的每个可能的结果集创建视图没有意义

如果我可以提出一个建议,请考虑SqL92 ANSI语法

SELECT agent.id AS id ,agent.name AS name, shop.id AS shop_id, shop.name AS shop_name
FROM agent
INNER JOIN shop ON agent.shop_id=shop.id
WHERE agent.id=$id;

在任何情况下,您都不应该使用循环从PHP多次访问MySQL,以查找结果集的列。

如果这只是您将在前端页面中使用的特定查询,那么简单的SQL应该工作得最好。 为想要从MySQL获得的每个可能的结果集创建视图没有意义

如果我可以提出一个建议,请考虑SqL92 ANSI语法

SELECT agent.id AS id ,agent.name AS name, shop.id AS shop_id, shop.name AS shop_name
FROM agent
INNER JOIN shop ON agent.shop_id=shop.id
WHERE agent.id=$id;

在任何情况下,您都不应该使用循环从PHP多次访问MySQL,以获得这样一个结果集的查找列。

我不会为这样一个简单的查询使用视图,使用两个单独的结果似乎毫无意义,因此我建议使用最后一个查询。

我不会为这样一个简单的查询使用视图,并且使用两个单独的结果似乎没有意义毫无意义,所以我建议使用最后一个查询

我不熟悉这样运行查询,但我发现这个线程非常有用。你也喜欢这个工作吗

$query = "SELECT shop.id, shop.name, agent.name FROM shop LEFT JOIN agent ON shop.id = agent.id";

$res = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($res)){
    echo $row['shop']['name']. " - ". $row['agent']['name'];
    echo "<br />";
}

我对运行这样的查询还不熟悉,但我发现这个线程非常有用。你也喜欢这个工作吗

$query = "SELECT shop.id, shop.name, agent.name FROM shop LEFT JOIN agent ON shop.id = agent.id";

$res = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($res)){
    echo $row['shop']['name']. " - ". $row['agent']['name'];
    echo "<br />";
}

所以连接查询比序列查询更快?它可以帮助DBMS准确地找出表之间的关系,以便更好地进行优化,从而获得更可预测的查询。通常情况下,它不会更快,但它也是提高可读性的良好实践。因此,联接查询比序列查询更快?它可以帮助DBMS准确地找出表之间的关系,以便更好地优化,从而获得更可预测的查询。通常情况下,它不会更快,但它也是提高可读性的良好实践。