首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SelectQuery,db_query()和寻呼机

SelectQuery,db_query()和寻呼机
EN

Drupal用户
提问于 2012-01-30 10:46:42
回答 2查看 4.9K关注 0票数 2

我有一个使用db_query()的子查询的长查询。

到目前为止,我知道SelectQuery of D7伴随着扩展器。示例扩展程序是PagerDefault (替换Drupal 6 pager_query())。

我需要我的寻呼机查询。我可以把PagerDefaultdb_query()结合使用吗?

如果我必须使用db_select()作为寻呼机,如何使用db_select()实现子查询的查询?

代码语言:javascript
运行
复制
$result = db_query("SELECT leg.*,
    ( SELECT COUNT(*)
    FROM {field_data_field_leg}
    WHERE field_leg_nid = leg.nid AND bundle = :bundle ) AS reviews
FROM 
    ( SELECT
        n.nid, n.created, title, field_from_value origin, field_to_value destination,
        field_price_value price, term.name transport
    FROM {node} n
        JOIN {field_data_field_leg} l ON n.nid = l.field_leg_nid
        JOIN {field_data_field_from} ff ON n.nid = ff.entity_id
        JOIN {field_data_field_to} ft ON n.nid = ft.entity_id
        JOIN {field_data_field_transport} t ON l.entity_id = t.field_transport_nid
        JOIN {field_data_field_price} p ON t.entity_id = p.entity_id
        JOIN {field_data_field_transport_type} ttype
            ON t.field_transport_nid = ttype.entity_id
        JOIN {taxonomy_term_data term} ON ttype.field_transport_type_tid = term.tid
    WHERE n.type = :type
    ORDER BY n.created DESC, field_price_value ASC
) AS leg
GROUP BY nid 
ORDER BY created DESC",
array(':bundle'=>'review', ':type' => 'leg'));
EN

回答 2

Drupal用户

发布于 2012-01-30 11:31:44

简单地说,子查询在db_select()中是不可能的,寻呼机只能通过查询生成器( SelectQueryEntityFieldQuery )创建。

因此,您不能使用上面的查询并利用Drupal的寻呼机系统,如果您想要上面的查询,您必须自己管理寻呼机,或者将查询重写为几个查询。

票数 1
EN

Drupal用户

发布于 2012-02-01 14:36:41

这应该是可能的。

看看SelectQuery::countQuery(),它正在构建一个类似的查询。

基本上,您可以将一个完整的SelectQuery对象传递给db_select(),而不是表字符串。

因此,首先需要构建内部查询,然后创建另一个实例并将第一个查询传递给它。

您可能希望提供一个自定义计数查询,因为您可能可以构建一个比有两个嵌套子subqeries更快的查询。

票数 1
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/21051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档