MySQL到Drupal 7数据库选择



我正试图用drupal 7 db_select执行下面的mysql查询。但我不明白这是怎么做到的。有人能帮我把下面的mysql查询翻译成drupal7动态数据库查询吗?

我的主要目标实际上是根据名称中给定的字符串位置对mysql结果进行排序。请记住,我不想获取所有的结果并用php进行排序,相反,我想使用mysql来完成这项工作。正如我所知,"ORDER BY LOCATE"命令正是这样做的。

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

1。db_select的适当示例

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

我在中的示例,表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方式的逻辑而过度复杂化你的代码,这种逻辑对于复杂的任务来说往往已经过时或过于简单。

我认为你应该试试这样的方法。db_like函数似乎可以满足您的要求。

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

最新更新