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
    ";
  • 私の組織テーブルには、組織に関する情報が含まれています (以下は 1 つの組織です)

id、dateModified、オブジェクト、参照、タイトル

2312, 2013-04-22 17:34:55, {"__attributes":{"item_id":6868447,"external_id":..., 585567, テスト組織

  • 私の組織タイプ テーブルには、1 つの組織に対して複数のエントリが含まれています。組織はさまざまな種類になる可能性があるためです。(上記の組織に所属するのは以下の2種類)

id、dateModified、relativeTable、ref、値

5, 2013-04-22 17:34:55, 組織, 585567, 3

6, 2013-04-22 17:34:55, 組織, 585567, 2

  • 最後に、オプション テーブルには、参照用に使用できるタイプごとに 1 つの行が含まれています。

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, ベンダー

最後にタイプが埋め込まれた 1 つの組織を返すことができるようにしたい (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

私の知る限り。mysql が配列をフィールド値として返すことは不可能です。SQL式に「order by 1,2,3,4」を追加し、フェッチループで配列を収集し、1〜4列を前の行と比較して、独自のコードで実行できます。

于 2013-04-23T09:47:05.220 に答える