我正在尝试使用 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 ('')
.
此外,不使用.
带有$s1
调用的运算符__toString()
,而不是将其保留为本机 Zend_Db_Select 对象。有没有其他方法可以得到parens $s1
?
或者,是否有另一种方法来完成整个查询?我想返回每个 SKU 和所有状态的串联分组(GROUP_CONCAT()
在 MySQL 中)。该表很大,因此在 PHP 中迭代它们需要非常长的时间。