Доброе утро!
У меня есть база данных с двигателем MariaDB 5.5.x. В базе данных у меня есть таблица «items»:
Table "items"------------
ID |name | location | ... |
--------------------------
1 |some name1| 3;56;23;15;4; |
-----------------------
2 |some name2| 4;8;90; |
-----------------------
3 |some name3| 6;27;18;87;|
Я ищу способ получить идентификатор, когда я знаю location_ID fx. «90». Все местоположения в базе данных разделены точкой с запятой («;»). На Zend я использовал и все заработало:
where("location REGEXP '(^|[[.semicolon.]])" . $id . "([[.semicolon.]]|$)'");
Я программировал на Slim Framework с классом MeekroDB. Мой текущий код в PHP:
$DB = new DB(); //MeekroDB PHP Class
$data = $DB::query("SELECT * FROM items WHERE locations REGEXP '(^|[[.semicolon.]])%s([[.semicolon.]]|$)'" , $id);
$ id является целым числом. Я получаю ошибку:
ЗАПРОС: ВЫБЕРИТЕ * ИЗ ИЗДЕЛИЙ, ГДЕ МЕСТО РЕГИЭК
‘(^ | [[. точка с запятой.]])’ 1 ‘([[. точка с запятой.]] | $)’ ОШИБКА: у вас есть ошибка
в вашем синтаксисе SQL; проверьте руководство, которое соответствует вашей MariaDB
версия сервера для правильного синтаксиса для использования рядом
‘1’ ([[. Точка с запятой.]] | $) » В строке 1
Есть идеи, что не так?
mysql> SELECT FIND_IN_SET('87', REPLACE('6;27;18;87', ';', ','));
+----------------------------------------------------+
| FIND_IN_SET('87', REPLACE('6;27;18;87', ';', ',')) |
+----------------------------------------------------+
| 4 |
+----------------------------------------------------+
1 row in set (0.00 sec)
То есть,
FIND_IN_SET()
искатьВаш код будет что-то вроде
DB::query("SELECT * FROM items
WHERE FIND_IN_SET(%s, REPLACE(locations, ';', ','))",
$id);
MariaDB 5.5.x не имеет [[.semicolon.]], Вместо этого используйте простую точку с запятой:
SELECT * FROM items WHERE location REGEXP '(^|;)8(;|$)'
http://sqlfiddle.com/#!9/0c5cb/1
До MariaDB 10.0.5 использовалась библиотека регулярных выражений, соответствующая POSIX 1003.2, которая не имеет [[.semicolon.]]. Начиная с MariaDB 10.0.5 на PCRE используется библиотека, которая поддерживает [[.semicolon.]]. https://mariadb.com/kb/en/mariadb/regular-expressions-overview/