PHP-php序列化后存入mysql后 排序问题和like搜索问题

PHP-php序列化后存入mysql后 排序问题和like搜索问题

瑾兮 发布于 2017-06-23 字数 558 浏览 1216 回复 4

在对一个交易类型的网站进行数据库设计,因为网站需求需要对一个数据表的字段写入2个不同的数据。
我把
serialize(array("i"=>2000,"n"=>3000))
serialize(array("i"=>2500,"n"=>3000))
得出的序列化结果存入两条数据打牌mysql数据库字段price 中。
网站前台展示时 需要进行mysql查询时对同为i的2000和2500进行从小至大、从大至小排序。怎么解决?
我不考虑增加字段的原因是,这个数据表中序列化存入的字段多到20多个字段,整个展开后一张表中近60个字段。
暂时不考虑分两张表。

另外我对序列化后的字段内容 like 模糊搜索 怎样进行?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

虐人心 2017-10-25 4 楼

对序列代的内容可以试着用MYSQL函数REGEXP 正则函数,但好像无法排序,排序可以用程序排序

晚风撩人 2017-10-16 3 楼

对序列化的内容进行Like,本身就不现实,因为被序列化的数据这已经不是原子数据了。至于排序有两个方面,一就是你把这两个字段单独存储,然后排序,二就是拿到程序的业务逻辑层去排序!

甜柠檬 2017-09-04 2 楼

既然你真的要这么做的话,也不是没有办法,但是存储json或序列化之后的值 就没必要了。
可以直接存入有规律的字符串,假设 单个 price 最大值为 10 位数,位数不足以 - 代替,用逗号分隔 即:

i      n      x
2000------,3000------,180-------
2500------,3000------,3600------

其余的交给程序处理:

首先 定义一个数组 为 $pos= array(i => 1,n => 12,x =>23); //与数据库顺序对应

1 ,按price 中的一个价格排序,例按照 n 降序:

$start = $pos['n'];
select * from tab where 1 order by substring(price,$start,10) desc

2,like 搜索某个价格 例 搜 x :

$start = $pos['x'];
select * from tab where substring(price,$start,10) like '12%'

3 将 price 字段 转换回数组:

$res = "2000------,3000------,180-------";

$data = array_combine(array_flip($pos),explode(',',str_replace('-','',$res)));

建议还是合理存储数据,我上边所做的其实没多大意义。。

想挽留 2017-07-28 1 楼

这种单纯的序列化后做存储靠索引查询的数据去这样设计是没问题的,但是你要还拿这个字段做Mysql的like操作,我个人觉的这样设计不是很合理,虽然没有给出你一个合理的解决方案,主要再怎么想出来的答案其实都感觉是空中画画,没有什么太大实际性意义啊!建议你项目需求很强烈的话,趁早改变这种表结构吧,这是我个人的建议,希望参考