gpt4 book ai didi

php - 处理在 MySQL 中存储为 JSON 对象的数据

转载 作者:行者123 更新时间:2023-11-28 23:44:31 25 4
gpt4 key购买 nike

我使用的是 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 部分(又名“今年”部分。它可以为 null,也可以是去年,需要更新到今年)。我怎样才能做到这一点并仍然保持第 1 部分(也就是生日)不变?

有人知道怎么做吗?

谢谢。

最佳答案

解决方案一:

您可以更新到 MySQL 5.7,其中现在支持 JSON 列字段类型。

所以你的查询看起来像这样:

SELECT * FROM CUSTOMER WHERE MONTH(jsn_extract(custom,"$.1")) = MONTH(NOW()) 和 DAY(jsn_extract(custom,"$.2")) = DAY(NOW( ))


解决方案 2:

正常查询数据并使用 PHP 函数过滤您需要的结果 - 例如 JSON Decode + DateTime 类。

http://php.net/manual/en/class.datetime.php

http://php.net/manual/en/function.json-decode.php


解决方案 3:

您可以使用 SUBSTRING_INDEX 等 MySQL 函数直接从 JSON 中提取您的值。但是当数据结构发生变化时这会导致奇怪的错误并且不是很安全。

关于php - 处理在 MySQL 中存储为 JSON 对象的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33838737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com