0

我有以下 SQL:

    $queryString = "
        SELECT 
            c.id,
            c.object,
            c.ref,
            c.title,
            o.value
        FROM 
            organisations c
        INNER JOIN 
            organisationType oT ON
            oT.ref = c.ref 
        INNER JOIN 
            options o ON
            oT.value = o.ref
        WHERE c.ref = '585567'
        ORDER BY 
            title
    ";
  • 我的组织表包含有关组织的信息(以下是一个组织)

id、dateModified、object、ref、title

2312, 2013-04-22 17:34:55, {"__attributes":{"item_id":6868447,"external_id":..., 585567, 测试机构

  • 我的 organizationType 表包含一个组织的多个条目,因为一个组织可以是多种不同的类型。(以下是分配给上述组织的2种)

id、dateModified、relativeTable、ref、值

5, 2013-04-22 17:34:55, 组织, 585567, 3

6, 2013-04-22 17:34:55, 组织, 585567, 2

  • 最后,我的选项表包含可供参考的每种类型的一行:

id、dateModified、relativeTable、ref、值

1, 2013-04-22 16:36:59, 组织, 2, 客户

2, 2013-04-22 16:36:59, 组织, 3, 合伙人

3, 2013-04-22 16:38:27, 组织, 4, 供应商

我希望能够返回一个组织,其类型嵌入到末尾(o.value)

所以我的结果可能是:

[1] => stdClass Object
        (
            [id] => 2312
            [object] => ""
            [ref] => "585567"
            [title] => "Test organisation"
            [type] => array( [0] => "Client", [1] => "Vendor" )
        )

使用我当前的 SQL,我将返回一个包含 2 行的数组,其中包含该行的所有组件的副本,除了已更改的类型。这很好,但并不完美。

4

2 回答 2

1

您不能真正像在 SQL 中那样直接带回子数组。不过,您可以带回所有值的串联字段。像这样的东西: -

$queryString = "
                SELECT c.id,
                        c.object,
                        c.ref,
                        c.title,
                GROUP_CONCAT(o.value) AS type
                FROM organisations c
                INNER JOIN organisationType oT ON oT.ref = c.ref 
                INNER JOIN options o ON oT.value = o.ref
                WHERE c.ref = '585567'
                GROUP BY c.id, c.object, c.ref, c.title
                ORDER BY title
    ";
于 2013-04-23T09:45:07.817 回答
0

AFAIK。mysql不可能将数组作为字段值返回。您可以通过自己的代码执行此操作,将“order by 1,2,3,4”添加到您的 sql 表达式中,并在 fetch 循环中收集一个数组,将 1-4 列与前一行进行比较。

于 2013-04-23T09:47:05.220 回答