【问题标题】:Nested Array with LEFT JOIN TABLE extracting results使用 LEFT JOIN TABLE 提取结果的嵌套数组
【发布时间】:2014-11-14 01:38:28
【问题描述】:

我可能做错了,但我真的需要帮助来掌握如何处理嵌套数组。我有两个表用户和评论。

这是我正在使用的 SELECT 语句:

SELECT * 
FROM `users` 
LEFT JOIN `reviews` 
ON users.userId = reviews.user_id 
WHERE installation_id = $installation_id

这就是我接收数组的方式:

Array
(
    [0] => Array
        (
            [userId] => 60
            [usersEmail] => gggg@gmail.com
            [password] => 0Vg+sLdlALchd39l+3K3QXFZlvh79bwqXFp/J3nIR+o=
            [usersName] => Lauren 
            [role] => scout
            [id] => 1
            [user_id] => 60
            [client_id] => 62
            [comments] => This person was extremely professional and went above and beyond. Her pricing was reasonable.
            [stars] => 4
        )

    [1] => Array
    (
        [userId] => 60
        [usersEmail] => gggg@gmail.com
        [password] => 0Vg+sLdlALchd39l+3K3QXFZlvh79bwqXFp/J3nIR+o=
        [usersName] => Lauren Rothlisberger
        [role] => scout
        [id] => 2
        [user_id] => 60
        [client_id] => 1
        [comments] => She was pretty good. I have a couple small complaints but overall decent experience. 
        [stars] => 3
    )

[2] => Array
    (
        [userId] => 63
        [usersEmail] => proth@mail.com
        [password] => 
        [usersName] => Paul Rothlisberger
        [role] =>
        [id] => 
        [user_id] => 
        [client_id] => 
        [comments] => 
        [stars] => 
    )

)

这件事对我来说毫无意义。我认为它会更像

[1] => Array
    (
        [userId] => 60
        [usersEmail] => gggg@gmail.com
        [password] => 0Vg+sLdlALchd39l+3K3QXFZlvh79bwqXFp/J3nIR+o=
        [usersName] => Lauren Rothlisberger
        [role] => scout
        [id] => 2
        [user_id] => 60
        [client_id] => 1
                Array [0](
                      [comments]  
                      [stars] ) 
    )

如何获得该数组?此外,他们如何遍历用户,然后向每个用户显示他们所有的 cmets 和星星。

我也不知道如何找到 UserId = 60 的星星,然后给出该用户的平均星星。

感谢您为我提供的任何帮助。我显然缺少一些基础知识。请不要指向我已经通过它并且无法应用它的文档。

【问题讨论】:

  • 只使用mysql查询你不能这样做你必须在你的结果之上执行循环来准备这样的数组
  • 更新你的代码你到目前为止所尝试的
  • 许多 PHP 框架(Laravel、CakePHP 等)能够按照您的预期在查询输出中组织表关系,但仅 SQL 只能处理二维结果集。如果你在一个普通的 MySQL 客户端中执行相同的查询,你的结果将是严格的表格。使用原始 PHP,您需要自己编写代码。
  • 所以我完全误解了能够加入表的意义?你能给我举个例子吗。为什么我应该有一个表 users_reviews?

标签: php sql foreach multidimensional-array


【解决方案1】:

您已经注意到,返回的每条记录都是一条完整的记录,当涉及多对一关系时,您会为每个组合获得一条记录。

当我遇到这种情况时,我应用以下短循环将结果打包成更类似于第二种格式的内容,但它每次都包含重复的用户级别字段。这样我可以很容易地计算每个用户的子项目数,通过在输出端使用嵌套的 foreach 进行中间排序或其他操作。

$results = array();
$results_raw = db.select(' ... the select statement ');
if (is_array($results_raw)) foreach ($results_raw as $result) {
    $results[$result['userId']] = $result;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-13
    • 2017-11-17
    • 2019-09-06
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多