Zend_Db_Selectを使用して次のクエリをコーディングしようとしています。
SELECT p1.SKU,
(
SELECT ',' + Status
FROM "Products" "p2"
WHERE p2.SKU = p1.SKU
ORDER BY "Status"
FOR XML PATH ('')
) AS "Statuses"
FROM "Products" p1
GROUP BY SKU
これは私がこれまでに持っているものです:
$s1 = $products->select()
->setIntegrityCheck(false)
->from(array('p2' => 'Products'),
new Zend_Db_Expr("',' + Status")
)
->where('p2.SKU = p1.SKU')
->order('Status');
$s2 = $products->select()
->from(array('p1' => 'Products'),
array('p1.SKU',
'Statuses' => new Zend_Db_Expr('(' . $s1 . ')')
)
)
->group('SKU');
echo $s2;
$dbRowSet = $Products->fetchAll($s2);
それは私にこれを与えます:
SELECT "p1"."SKU",
(
SELECT ',' + Status
FROM "Products" AS "p2"
WHERE (p2.SKU = p1.SKU)
ORDER BY "Status" ASC
) AS "Statuses"
FROM "Products" AS "p1"
GROUP BY "SKU"
必要なものを入手する方法がわかりませんFOR XML PATH ('')
。
また、ネイティブのZend_Db_Selectオブジェクトとして残す代わりに、呼び出しで.
演算子を使用していません。両親を連れて行く他の方法はありますか?$s1
__toString()
$s1
または、このクエリ全体を実行する別の方法はありますか?各SKUと、すべてのステータスの連結グループ(GROUP_CONCAT()
MySQLの場合は1つ)を返します。テーブルは巨大であるため、PHPでそれらを反復処理するのに許容できないほど長い時間がかかります。