我有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时,我正在寻找获取ID的方法。 “90后”。所有位置都在数据库中,以分号(“;”)分隔。在Zend我使用它并且它起作用了:
where("location REGEXP '(^|[[.semicolon.]])" . $id . "([[.semicolon.]]|$)'");
我使用MeekroDB Class在Slim Framework上编程。我目前在PHP中的代码:
$DB = new DB(); //MeekroDB PHP Class
$data = $DB::query("SELECT * FROM items WHERE locations REGEXP '(^|[[.semicolon.]])%s([[.semicolon.]]|$)'" , $id);
$ id是整数。我收到错误:
QUERY:SELECT * FROM items WHERE location REGEXP '(^ | [[.semicolon。]])'1'([[.semicolon。]] | $)'错误:你有错误 在你的SQL语法中;查看与MariaDB对应的手册 服务器版本,用于在附近使用正确的语法 '1'([[。分号。]] | $)''在第1行
知道出了什么问题吗?
答案 0 :(得分:0)
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);
答案 1 :(得分:0)
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。]]。从PCRE库中的MariaDB 10.0.5开始,支持[[.semicolon。]]。 https://mariadb.com/kb/en/mariadb/regular-expressions-overview/