Drupal 7 - 使用db_select不区分大小写LIKE

时间:2011-10-19 21:06:22

标签: php mysql drupal drupal-7 case-insensitive

我无法使用MySQL和Drupal 7获得不区分大小写的查询。这是我的模块代码:

$results = db_select('people_table', 'p')->fields('p');
if (array_key_exists('department', $_GET)) {
    $results->condition('Department', '%' . db_like($_GET['department']) . '%', 'LIKE');
}
return $results->orderBy('Name', 'ASC')->execute();

在网址中使用?department=Chemistry,我得到三个结果。使用网址中的?department=chemistry,我得不到任何结果。当我尝试$results->condition('UPPER(Department)'...时,我收到此错误:

  

PDOException:SQLSTATE [42S22]:找不到列:1054'where子句'中的未知列'UPPERDepartment':SELECT p。* FROM {people_table} p WHERE(UPPERDepartment LIKE:db_condition_placeholder_0 ESCAPE'\\')ORDER BY Name ASC;

所以看起来它吃掉了我的括号。如何进行不区分大小写的LIKE

修改Department列以及整个表格中的排序规则为utf8_binThis answer说“唯一特别的是utf8_bin,用于比较二进制格式的字符。”我不知道为什么选择这种排序规则,因为表中的所有数据都是英文文本。我可能只是将排序规则更改为utf8_general_ci

3 个答案:

答案 0 :(得分:5)

什么是部门字段的整理?,对于ex utf8_unicode_ci

,它应该是前缀* _ci(不区分大小写)

答案 1 :(得分:4)

您可以使用condition方法添加自定义where子句,而不是使用WHERE

$results->where('UPPER(Department)'...

答案 2 :(得分:0)

要搜索不区分大小写,请在 drupal 7 中执行以下操作

$query->where('UPPER(Department) LIKE :dept',  array('dept' => '%'.db_like($keyword).'%'));
$result = $query->execute();