gpt4 book ai didi

php - 创建 mysql 查询的正确方法

转载 作者:行者123 更新时间:2023-11-29 23:31:14 26 4
gpt4 key购买 nike

在这种情况下,构建 sql 查询的正确方法是什么:

$data = $db->query("SELECT * FROM users");

foreach ($data as $row) {
$data2 = $db->one("SELECT amount FROM cart WHERE id = " . $row['id']);
echo $row['name'] . '<br>';
echo $data2['amount'] . '<br>';

}

在上面的示例中,如果我有 500 个用户,这是否等于 500 次数据库调用?或者我应该使用单个查询,例如:

  $data = $db->query("SELECT *" 
. "\n (SELECT SUM(amount) FROM cart WHERE user.id = cart.user_id) as total"
. "\n FROM users";

两者有什么优缺点吗?

最佳答案

考虑以下语句:

select
u.name,
sum(a.amount) as total
from users u
inner join cart a on u.id = a.id
group by
u.name

这将一次性为您提供数据。假设您在购物车的用户 id 上有一个索引(我假设该列名为 id)并且用户表的主键是 id,那么您的数据提取可能会非常快。因此,优点是速度和对数据库的单个查询命中。

您问题中前一种方法的缺点是,如果您有 1000 个用户,则每 1000 个用户将从购物车表中提取一次金额。如果您的 PHP 脚本与 MySQL 服务器运行在不同的服务器上,则 1000 个查询文本将通过网络传输,并且将通过网络返回 1000 个结果集。此类任务需要更多时间,并且只会在数据库方面增加一些工作。与尝试去一次杂货店购买每件想要购买的产品相比。从家里到商店买鸡蛋,然后把它们扔回家,再去买苹果,然后把它们扔回家,这显然是低效的……为了提高这个过程的效率,我们从杂货店买了一车东西。一枪。这里的概念是相同的。

当有人更改规范并要求您仅获取姓氏为 Anderson 的用户的金额时,您问题中的第一个方法将需要修改 select ... from users where last_name = 'Anderson' 然后为每条记录一一获取金额。与此答案中的单个查询和 Kris 的答案相比,必须将相同的 where 子句添加到查询中,并且将在一次性查询中获得结果。

关于php - 创建 mysql 查询的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26569020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com