人人商城mysql语句从php序列化字段中按收货人、收货人手机号搜索订单

前言

没有什么好说的,客户要求按照收货人姓名(不是用户姓名昵称什么的是当前订单收货人姓名)、手机号订单号等信息搜索订单,恩够奇葩但是也得做啊,人人商城数据库的订单表地址字段是一个php序列化存储的字段,不是json对象,emm这就有点坑了,找了好久最后采用了正则表达式匹配方法实现了,可能有点low但是勉强能用(目前还没发现有什么后遗症),这里分享给大家。这里有几个坑要注意,mysql正则不支持非贪婪模式,还有不支持\d匹配数字要使用[0-9]这样才行。

实现sql语句

--下面这句是按照收货人姓名包含1111或则电话号码包含13333的搜索
SELECT
	*
FROM
	ims_ewei_shop_order
WHERE
	address REGEXP '.*s\:[0-9.]\:\"mobile\"\;s\:[0-9.]{1,}\:\".*13333.*'  or address REGEXP '.*s\:[0-9.]\:\"realname\"\;s\:[0-9.]{1,}\:\".*1111.*'  
	```