在存储在数据库中的序列化值内搜索

时间:2011-08-29 05:06:43

标签: php mysql arrays codeigniter serialization

我有一个房地产属性表,其中房地产属性的功能存储在序列化数组中。例如,房子可以有wifi,游泳池,花园等其他杂项功能。这些功能形成一个列表,带有值的数组,并被序列化并存储在表列的命名功能中。当我必须显示这些功能时,我获取序列化数组,取消序列化并显示它。现在,使用此表,我如何搜索具有Wifi和池的房子?其次,这个结构很好,直到时间搜索超出范围但我愿意修改它,如果有充分的理由,除了搜索,改变它。

更新
功能wifi可以拼写为“Wifi”或“WiFi可用”或“配备wifi”或任何东西。因此,wifi是关键字,功能实际上是由业主输入的,因此类似的功能可能会有所不同。因此,我们的想法是在serilised数组中保存功能

1 个答案:

答案 0 :(得分:2)

PHPs序列化格式(或JSON)在SQL中不是本机数据类型。但XML就是这样的。但这通常也是矫枉过正的。

单独表格方法的替代方法是当前要素的CSV列表(感谢FIND_IN_SET的SQL原生)。

否则,当您想保留序列化数据blob时,可以使用一些猜测来使用WHERE options REGEXP 's:4:"Pool";b:1'预搜索搜索查询。 (您需要知道正在处理的每个属性的确切序列化方案。)

对于与数据库无关的数据集,我认为这是合适的。但是,由于您使用DB 主要是来搜索数据blob,您应该重新考虑。