【发布时间】:2015-11-21 01:35:49
【问题描述】:
我使用的是 opencart 2.1,客户表上的字段之一是文本数组。数据字段(命名为自定义,键入文本)如下所示:
{"2":"2015","1":"2000-11-19"}
基本上,第一部分是生日(不允许为空),第二部分是今天(允许为空)。它使用 serialize($arr) 保存到数据库中
我需要一个查询来获取基于“生日”部分的数据。 基本上是这样的:
SELECT * FROM CUSTOMER WHERE MONTH(custom.1) = MONTH(NOW()) AND DAY(custom.2) = DAY(NOW())
我不知道如何引用自定义字段的第 1 部分或第 2 部分。如果我可以让查询工作,我可以将它带回 php 并使用 $arr = unserialize($arr) 将其提取到数组中并使用它。
另外,稍后,我需要更新自定义字段的第 2 部分(也就是“今年”部分。它可以为空,也可以是去年,并且需要更新到今年)。我怎样才能做到这一点并且仍然保持第 1 部分(也就是生日)不变?
有人知道怎么做吗?
谢谢。
【问题讨论】:
-
您是否尝试过使用json_decode?您必须将结果作为字符串提取。
-
除非你能用Mysql 5.7,并且改变列的类型,和用购物车软件没问题,那你就得用字符串对比整个字符串,而不仅仅是它的一部分。或者,使用
LIKE寻找独特的部分——不是很可靠。以这种方式存储数据通常不是一种好的做法,因为正如您所经历的那样,很难将其包含在查询中。我知道你没有这样设置,但你正在从别人的错误中吸取教训。 -
我对json_decode不是很熟悉,不能用Mysql 5.7。你能告诉我更多关于如何在这个例子中使用 json_decode 的细节吗?