我正在尝试使用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)
答案 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)
可以使用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.
正如某人在链接中的评论中所述,我发布了“有很多时间和地方只需要使用db_query。”
我认为是时候了:)不要仅仅为了使用drupal-way逻辑就使代码过于复杂,对于复杂的任务而言,drupal-way逻辑通常已经过时或过于简单。