【问题标题】:Drupal performing a query against the databaseDrupal 对数据库执行查询
【发布时间】:2011-04-13 05:38:53
【问题描述】:

我希望从我的 drupal 数据库中检索一些 nid。我有一个要运行的查询。

  SELECT node.nid AS projectnid
            FROM node node
            INNER JOIN content_type_project node_data_field_project_client ON node.vid = node_data_field_project_client.vid
            WHERE node_data_field_project_client.field_project_client_nid = (SELECT node_data_field_profile_company.field_profile_company_nid AS company_nid
            FROM node node  LEFT JOIN content_type_profile node_data_field_profile_company ON node.vid = node_data_field_profile_company.vid WHERE node.nid = 218)

我通过以下方式调用查询:

$query =
        "
            SELECT node.nid AS projectnid
            FROM node node
            INNER JOIN content_type_project node_data_field_project_client ON node.vid = node_data_field_project_client.vid
            WHERE node_data_field_project_client.field_project_client_nid = (SELECT node_data_field_profile_company.field_profile_company_nid AS company_nid
            FROM node node  LEFT JOIN content_type_profile node_data_field_profile_company ON node.vid = node_data_field_profile_company.vid WHERE node.nid = 218)
        ";
$result = db_query($query);
dsm($result);

dsm 给了我一个空对象。当我直接运行 SQL 时,我会得到一个结果。

所以我的问题是如何让 db_query 将所有结果作为对象返回(我不介意对象或数组)。

(SQL 是通过查看视图的查询输出创建的。)

这是一个后续问题:Drupal Views Relationships and Arguments

我有一个 Person 内容类型。它有一个 公司节点引用字段 这也是一种内容类型。我那时 有一个名为 Project 的内容类型。一种 项目有一个节点引用 公司内容类型。我要列出 与一个人有关的所有项目 id (nid)id (nid)

【问题讨论】:

    标签: drupal drupal-6


    【解决方案1】:

    以下作品:

    $query =
            "
                SELECT node.nid AS projectnid
                FROM node node
                INNER JOIN content_type_project node_data_field_project_client ON node.vid = node_data_field_project_client.vid
                WHERE node_data_field_project_client.field_project_client_nid = (SELECT node_data_field_profile_company.field_profile_company_nid AS company_nid
                FROM node node  LEFT JOIN content_type_profile node_data_field_profile_company ON node.vid = node_data_field_profile_company.vid WHERE node.nid = 218)
            ";
    $results = db_query($query);
    while ($result = db_result($results)) {
        dsm($result);
    }
    

    您需要使用 db_result() 来获取结果。使用http://drupal.org/node/259432#comment-846946 解决了这个问题

    【讨论】:

    • 请注意,您应该将所有表名包装在 {} 中,否则访问控制、表共享和其他一些模块可能无法正常工作。
    • 还要注意,在 Drupal 7 中,数据库系统是基于 PDO 的,因此查询的结果可以直接迭代,而不是依赖于 db_result。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2012-04-23
    • 2021-08-17
    • 2012-11-18
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多