加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 22:32:17 所属栏目:PHP教程 来源:网络整理
导读:如何使用Zend_Db_Select直接从子查询(派生表)中进行选择? 看,我有5个具有相同结构的表,我想从中获取所有行,合并它们并删除重复项.我正在使用UNION自动删除重复项.问题是我之前为每个表添加了一个静态列,因此有一列不同=重复发生. 这是我目前的查询: 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读