php – Zend_Db_Select如何从子查询中选择(派生表)

如何使用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
");

有关:
Zend_Db_Table subquery

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...