gpt4 book ai didi

php - 如何使用 PHP 处理从 SQL 查询返回的树结构?

转载 作者:太空宇宙 更新时间:2023-11-03 11:16:08 26 4
gpt4 key购买 nike

这是一个“理论”问题。

我无法定义问题,请耐心等待。

当数据库中有多个相关表时,例如一个包含“用户”的表和一个包含“电话”的表

“phones”和“users”都有一个名为“user_id”的列

select user_id,name,phone from users left outer join phones on phones.user_id = users.user_id;

查询将为我提供所有用户的行,无论他们是否有电话。

如果用户有多个电话,他的姓名将按预期分两行返回。

columns=>|user_id|name|phone|
row0 = > | 0 |fred|NULL|
row1 = > | 1 |paul|tlf1|
row2 = > | 1 |paul|tlf2|

上述案例中的名称“paul”是必要的重复项,但在 RDMS 看来根本不是重复项!然后它将由一些服务器端脚本语言处理,例如 php。

这些“必要的重复项”在实际网站或应用程序中实际上是如何处理的?例如,该行如何“映射”到一些可用的对象模型中。

附注如果您决定发布示例,请尽可能发布用于 php、mysql、sqlite 的示例。

编辑:

感谢您提供答案,每个答案都以不同的方式解释了问题,因此以自己的方式不同且正确。

我得出的结论是,如果往返行程很昂贵,这将是 Jakob Nilsson-Ehle 解决方案的最佳方式,该解决方案适合理论问题。

如果往返很便宜,我会按照 9000 的建议分别选择手机和用户,如果我需要为每个用户显示一部手机,我会给手机一个主列并将其与用户合并选择像 Ollie Jones 正确建议的那样。

尽管对于现实生活中的应用,我使用的是 9000 的答案,但我认为对于这个不切实际的问题,Jakob Nilsson-Ehle 的解决方案是最合适的。

最佳答案

在这种情况下,在 PHP 中我可能会做的事情是在 PHP 数组中使用 userId,然后使用它来持续更新用户

一个非常简单的例子是

$result = mysql_query('select user_id,name,phone from users left outer join phones on phones.user_id = users.user_id;');$users = Array();while($row = mysql_fetch_assoc($result)) {   $uid =$row['user_id'];   if(!array_key_exists($uid, $users)) {      $users[$uid] = Array('name' => $row['name'], 'phones' => Array());   }   $users[$uid]['phones'][] = $row['phone']; }

当然,根据您的编程风格和用户数据的复杂性,您可以定义一个 User 类或其他东西并填充数据,但这基本上是我会做的。

关于php - 如何使用 PHP 处理从 SQL 查询返回的树结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4851062/

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