MySQL至Drupal 7 db_select

时间:2018-11-28 16:30:16

标签: mysql mysqli drupal drupal-7 drupal-database

我正在尝试使用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)

2 个答案:

答案 0 :(得分:1)

我认为您应该尝试类似的方法。 db_like函数似乎可以满足您的需求。

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

答案 1 :(得分: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逻辑就使代码过于复杂,对于复杂的任务而言,drupal-way逻辑通常已经过时或过于简单。