【问题标题】:Return multileve array from MySql从 MySql 返回多层数组
【发布时间】:2014-08-11 00:15:14
【问题描述】:

我正在尝试以这种格式(或至少非常相似)从查询中返回一些数据

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Gym Opening Times
            [times] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [label] => Mon-Thu
                            [time] => 6:00am : 10:00pm
                        )

                    [1] => Array
                        (
                            [id] => 2
                            [label] => Fri
                            [time] => 6:00am : 09:00pm
                        )

                    [2] => Array
                        (
                            [id] => 3
                            [label] => Sat & Sun
                            [time] => 6:00am : 10:00pm
                        )

                )

        )

    [1] => Array
        (
            [id] => 1
            [name] => Resteruant Times
            [times] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [label] => Mon-Thu
                            [time] => 6:00am : 10:00pm
                        )

                    [1] => Array
                        (
                            [id] => 2
                            [label] => Fri
                            [time] => 6:00am : 09:00pm
                        )

                    [2] => Array
                        (
                            [id] => 3
                            [label] => Sat & Sun
                            [time] => 6:00am : 10:00pm
                        )

                )

        )

)

到目前为止我有这个查询,但是,它抛出一个错误执行 PDO 查询时出错:SQLSTATE[21000]:基数违规:1242 子查询返回超过 1 行

SELECT 
    otg.groupName, 
    otg.id, 
   (SELECT 
        ot.id, 
        ot.label, 
        ot.time 
    FROM 
        opening_times ot 
    WHERE 
        ot.groupId = otg.id) as times
FROM 
    opening_time_groups as otg 
WHERE 
    otg.venueId = $venueId 
    AND otg.active = 1

我做错了什么?或者这是我在 1 个查询中根本无法做到的事情?

【问题讨论】:

  • 你不能直接从 MySQL 中得到这个。您需要使用像 Doctrine 这样的驱动程序来获取此类集合。

标签: mysql


【解决方案1】:

您的子查询返回不止一行。 SELECT 中的子查询只能返回一行。

但是,您似乎可以使用普通连接来简单地完成此操作,然后在调用它的脚本中对数组进行排序:-

SELECT 
    otg.groupName, 
    otg.id, 
    ot.id, 
    ot.label, 
    ot.time 
FROM     opening_time_groups as otg 
LEFT OUTER JOIN opening_times ot 
ON  ot.groupId = otg.id) as times
WHERE otg.venueId = $venueId 
AND otg.active = 1

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2013-12-04
    • 2022-01-22
    相关资源
    最近更新 更多