Drupal 7 - без учета регистра LIKE с db_select - PullRequest
3 голосов
/ 20 октября 2011

Я не могу получить запрос без учета регистра, используя 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 в URL я получаю три результата. С ?department=chemistry в URL я не получаю результатов. Когда я пытаюсь $results->condition('UPPER(Department)'..., я получаю эту ошибку:

PDOException: SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'UPPERDepartment' в 'предложении where: ВЫБРАТЬ p. * FROM {people_table} p WHERE (UPPERDepartment LIKE: db_condition_placeholder_0 ESCAPE' \\ ') ORDER BY Name ASC;

Так что, похоже, он съел мои скобки. Как я могу сделать без учета регистра LIKE?

Редактировать: сопоставление для столбца Department, а также для всей таблицы: utf8_bin. Этот ответ гласит: «Единственное специальное предложение - utf8_bin, предназначенное для сравнения символов в двоичном формате». Я не знаю, почему было выбрано это сопоставление, так как все данные в таблице - текст на английском языке. Я мог бы просто изменить сопоставление на utf8_general_ci .

Ответы [ 2 ]

5 голосов
/ 20 октября 2011

что такое сопоставление поля Department ?, должно быть с префиксом * _ci (без учета регистра) для ex utf8_unicode_ci

4 голосов
/ 20 октября 2011

Вместо использования condition вы можете использовать метод where для добавления пользовательского предложения WHERE:

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