MySQL 到 Drupal 7 db_select

Posted

技术标签:

【中文标题】MySQL 到 Drupal 7 db_select【英文标题】:MySQL to 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)

【问题讨论】:

【参考方案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'

以上是关于MySQL 到 Drupal 7 db_select的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 7 中的 Mysql 语法错误

MongoDB 中的 Drupal 7 数据

MySQL 服务器在 Drupal 7 中消失了

Drupal 7 - 暴露过滤器 - 全文搜索

从 Drupal 6 升级到 Drupal 7:程序员的最佳实践?

将密码从 Drupal 7 迁移到 Django