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的主要内容,如果未能解决你的问题,请参考以下文章