如何使用Zend_Db_Select直接从子查询(派生表)中进行选择?
看,我有5个具有相同结构的表,我想从中获取所有行,合并它们并删除重复项.我正在使用UNION自动删除重复项.问题是我之前为每个表添加了一个静态列,因此有一列不同=>重复发生.
这是我目前的查询:
SELECT `news_main`.*,'main' as `category` FROM `news_main` UNION SELECT `news_politics`.*,'politics' as `category` FROM `news_politics` UNION SELECT `news_society`.*,'society' as `category` FROM `news_society` UNION SELECT `news_world`.*,'world' as `category` FROM `news_world` UNION SELECT `news_business`.*,'business' as `category` FROM `news_business` ORDER BY `date` DESC LIMIT 8
了解如何将静态值添加到新列类别?现在其他一切都是相同的(有重复的行),但由于它们来自不同的类别,因此UNION无法删除它们.
所以我想我可以从这个子查询中选择所有行并将它们分组以删除重复项,如下所示:
SELECT * FROM ( SELECT `news_main`.*,'main' as `category` FROM `news_main` UNION SELECT `news_politics`.*,'politics' as `category` FROM `news_politics` UNION SELECT `news_society`.*,'society' as `category` FROM `news_society` UNION SELECT `news_world`.*,'world' as `category` FROM `news_world` UNION SELECT `news_business`.*,'business' as `category` FROM `news_business` ORDER BY `date` DESC LIMIT 8 ) as subtable GROUP BY `source` ORDER BY `date` DESC
我在MysqL中运行它并且它完美运行..唯一的问题是….
如何使用Zend_Db_Select的花哨功能执行此操作?
提前致谢!
解决方法
我不确定你是否可以在Zend_Db_Select的from结构中使用嵌套选择,或者你是否应该这样做,但另一种解决方案是获取db适配器并手动构建SQL查询.
$db = Zend_Db_Table::getDefaultAdapter(); $db->query("SELECT * FROM ( SELECT `news_main`.*,'main' as `category` FROM `news_main` UNION SELECT `news_politics`.*,'politics' as `category` FROM `news_politics` UNION SELECT `news_society`.*,'society' as `category` FROM `news_society` UNION SELECT `news_world`.*,'world' as `category` FROM `news_world` UNION SELECT `news_business`.*,'business' as `category` FROM `news_business` ORDER BY `date` DESC LIMIT 8 ) as subtable GROUP BY `source` ORDER BY `date` DESC ");