【问题标题】:MySQL to Drupal 7 db_selectMySQL 到 Drupal 7 db_select
【发布时间】:2019-04-30 15:10:53
【问题描述】:

我正在尝试使用 drupal 7 db_select 执行以下 mysql 查询。但我无法理解如何做到这一点。有人可以帮我将以下 mysql 查询翻译成 drupal 7 动态数据库查询吗?

我的主要目标实际上是按名称中给定的字符串位置对 mysql 结果进行排序。请记住,我不想获取所有结果并使用 php 对它们进行排序,而是我想使用 mysql 来做到这一点。据我所知,“ORDER BY LOCATE”命令正是这样做的。

SELECT name FROM `taxonomy_term_data` WHERE LOCATE('credit', name) > 0 ORDER BY LOCATE('credit', name)

【问题讨论】:

    标签: mysql drupal drupal-7 drupal-database


    【解决方案1】:

    1。 db_select 的正确示例

    有可能,使用 drupal 7 db_select,这是我的示例工作代码(在 this post 的帮助下完成)

    我的示例在表 cities 中包含列 city。查找带有双“o”的城市并按其位置排序:

    $r = db_select('cities', 't')
      ->fields('t')
      ->condition('t.city', '%' . db_like('oo') . '%', 'LIKE');
    $r->addExpression("LOCATE('oo', city) ", 'loc');
    $r = $r->orderBy('loc', 'DESC')
      ->execute()
      ->fetchAllAssoc("id");
    

    在您的示例中如此相似的是:

    $r = db_select('taxonomy_term_data', 't')
      ->fields('t')
      ->condition('t.name', '%' . db_like('credit') . '%', 'LIKE');
    $r->addExpression("LOCATE('credit', name) ", 'loc');
    $r = $r->orderBy('loc', 'DESC'); //Or ASC
    //Execute your query and gather result anyway you want.
    

    2。需要用db_select吗?

    正如有人在链接中的评论中所说,我发布了“有时和地点可以使用 db_query。”

    我认为是时候了 :) 不要为了使用 drupal-way 逻辑而使代码过于复杂,这对于复杂的任务来说通常已经过时或过于简单。

    【讨论】:

      【解决方案2】:

      我认为你应该尝试这样的事情。 db_like 函数似乎可以满足您的需求。

      $result = db_select('taxonomy_term_data', 'ttd')
        ->fields('ttd', 'name')
        ->condition('ttd.name, '%' . db_like('credit') . '%', 'LIKE')
        ->orderBy('ttd.name', 'DESC')
        ->execute();
      

      【讨论】:

      • 是的,我已经以这种方式执行查询,但我需要通过名称中给定字符串的位置来排序结果。我实际上不是在寻找“->orderBy('ttd.name', 'DESC')”,而是尝试使用 mysql 查询“ORDER BY LOCATE('credit', name)”对结果进行排序。我不明白如何将此查询转换为 D7 动​​态查询。
      • 引用缺失->condition('ttd.name'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多