【发布时间】:2013-04-26 11:02:17
【问题描述】:
我如何将下面的查询转换为子查询? 我不想使用 JOINS 我想通过子查询做同样的事情。即我需要三个连接中的三个子查询。下面的查询怎么可能?
protected $_name = 'sale_package_features';
public function getAllSalePackageFeatures(){
$sql = $this->select()->setIntegrityCheck(false)
->from(array('spf' => $this->_name))
->joinLeft(array('sd' => 'sale_devices'),'sd.sale_device_id = spf.sale_device_id',array('sd.sale_device_name AS deviceName'))
->joinLeft(array('sp' => 'sale_packages'),'sp.sale_package_id = spf.sale_package_id',array('sp.sale_package_name AS packageName'))
->joinLeft(array('sf' => 'sale_features'),'sf.sale_feature_id = spf.sale_feature_id',array('sf.sale_feature_name AS featureName'))
->where('sf.parent_id != ?',0)
->order('spf.sale_package_feature_id ASC');
return $sql->query()->fetchAll();
}
已编辑:
SELECT
`spf`.*, `sd`.`sale_device_name` AS `deviceName`,
`sp`.`sale_package_name` AS `packageName`,
`sf`.`sale_feature_name` AS `featureName`
FROM `sale_package_features` AS `spf`
LEFT JOIN `sale_devices` AS `sd`
ON sd.sale_device_id = spf.sale_device_id
LEFT JOIN `sale_packages` AS `sp`
ON sp.sale_package_id = spf.sale_package_id
LEFT JOIN `sale_features` AS `sf`
ON sf.sale_feature_id = spf.sale_feature_id
WHERE (sf.parent_id != 0)
ORDER BY `spf`.`sale_package_feature_id` ASC
【问题讨论】:
-
在进行转换部分之前,如果您明确说明如何自行创建子查询,这可能是值得的,因此更清楚具体哪个部分在进行转换时遇到问题。只是一个想法。
-
是的,“需要”部分在您的问题中非常清楚。但是“阻止你做什么”的部分不是。这就是我问的原因,也许您可以对此进行一些改进,这可能有助于获得答案。但只是一个建议,我对 zendframework 中的子查询一无所知。
-
啊,好吧,所以你根本不知道如何首先使用 zend-framework 创建子查询?也许您知道纯 SQL,因此您可以展示您尝试实现的纯 SQL 示例?如果我不能提供太多帮助也很抱歉,我什至不知道在 zend-framework 中是否可以创建子查询。
-
只是看到您的编辑,如果您不介意,我可能会建议其他评论?我看到您发布了一个包含所有这些连接的 SQL 查询。您是否也可以(即使 SQL 代码不正确)放在您正在寻找的那种子查询下方?所以很清楚你想成为子查询的哪一部分?我问是因为有三个连接,不清楚您是否想要其中的一部分或全部作为子查询,甚至是多个子查询。
-
你可能应该在你的问题中写下来。我想说这对于一般的子查询来说并不常见,并不是说我对此有任何权威,但我认为如果你补充说你需要三个连接中的三个子查询,你的问题将因此受益。
标签: php zend-framework join subquery zend-db