我无法使用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_bin
。 This answer说“唯一特别的是utf8_bin,用于比较二进制格式的字符。”我不知道为什么选择这种排序规则,因为表中的所有数据都是英文文本。我可能只是将排序规则更改为utf8_general_ci。
答案 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();