mysql到drupal7db\u选择

cbjzeqam  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(360)

我试图用Drupal7db\u select执行下面的mysql查询。但我不明白这是怎么做到的。有人能帮我把下面的mysql查询翻译成drupal7动态db查询吗?
我的主要目标实际上是按照名称中给定的字符串位置对mysql结果进行排序。请记住,我不想获取所有的结果并用php对它们排序,相反,我想用mysql来实现这一点。我知道“orderbylocate”命令就是这样做的。

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

roejwanj1#

我想你应该试试这样的。 db_like 功能似乎做什么你正在寻找。

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

2uluyalo2#

1. db\u select的正确示例

有可能,使用Drupal7DB\uSelect,下面是我的示例工作代码(在本文的帮助下完成)
我在with table中的示例 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\u select吗?

正如有人在我发布的链接中的评论中所说的,“有很多时间和地点可以直接使用db\u查询。”
我认为这是时候了:)不要仅仅为了使用drupal方式的逻辑而过度复杂代码,这种逻辑通常已经过时,或者对于复杂的任务来说过于简单。

相关问题