简体   繁体   English

我如何一起使用REGEXP + mysql + procedure

[英]How i can use REGEXP+mysql+procedure together

I am creating function to find category by id. 我正在创建功能以按ID查找类别。 Because of categories values are stored in mysql database with php serialize and encoded json result looks like this : 由于类别的原因,值通过php序列化存储在mysql数据库中,编码后的json结果如下所示:

"a:2:{i:0;s:1:\"1\";i:1;s:2:\"50\";}"

I can use simple mysql statement and that's working fine with REGEXP : 我可以使用简单的mysql语句,并且可以与REGEXP正常工作:

SELECT * FROM provider_cat_subcat WHERE category_id REGEXP '\\"\50.\\"'

But i want to create procedure so i can put variable value. 但是我想创建过程,以便我可以放置变量值。 So when i am trying this : 所以当我尝试这个时:

WHERE provider_cat_subcat.category_id REGEXP '\\"' + cat_id + '.\"'

it's not working i think because REGEXP. 我认为这是行不通的,因为REGEXP。 Please help me to know how i can join variable with REGEXP or there's why i can use php. 请帮助我了解如何使用REGEXP联接变量,或者为什么可以使用php。

Full procedure: 完整程序:

BEGIN 
   SELECT * FROM provider_cat_subcat 
   WHERE provider_cat_subcat.category_id REGEXP '\\"' + cat_id + '.\"'
   AND provider_cat_subcat.subcategory_id REGEXP '\\"' + subcat_id + '.\"'; 
END

Thanks 谢谢

Could you try that please ? 你能尝试一下吗?

DELIMITER $$
CREATE PROCEDURE cat_regexp_search(IN cat_id int(11), IN sub_cat_id int(11))
BEGIN
  SET @cat_id    := cat_id;
  SET @sub_cat_id := sub_cat_id;
   SELECT * FROM provider_cat_subcat 
   WHERE provider_cat_subcat.category_id REGEXP CONCAT('\\"', @cat_id, '.\\"')
   AND provider_cat_subcat.subcategory_id REGEXP CONCAT('\\"', @sub_cat_id, '.\\"'); 
END
$$
DELIMITER ;

You should call this script as CALL cat_regexp_search(1, 3); 您应该将此脚本称为CALL cat_regexp_search(1, 3); When do you want to edit then call as 您何时要编辑,然后致电

DROP PROCEDURE IF EXISTS cat_regexp_search;

then execute create script again. 然后再次执行创建脚本。

BEGIN 
SELECT * FROM provider_cat_subcat 
   WHERE provider_cat_subcat.category_id REGEXP '^1[() -]*[[:digit:]]{3}[() -]*[[:digit:]]{3}[() -]*[[:digit:]]{4}$';
AND provider_cat_subcat.subcategory_id REGEXP '^1[() -]*[[:digit:]]{3}[() -]*[[:digit:]]{3}[() -]*[[:digit:]]{4}$';
END

try without slash 尝试不加斜线

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM