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

标签 php mysql sql arrays

我使用的是 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/

相关文章:

php - 如何从两个表中获取数据 - PHP 和 MySQL

mysql - 在 Gorm 中使用模型连接两个表的最佳方法是什么?

mysql - SQL仅选择列上具有最大值的行

mysql - 两个字段的全文搜索比一个字段的全文搜索快

mysql - MySQL 查询无结果

php - 我正在尝试根据用户选择值执行计算

javascript - 从 PHP 更新 DIV 标签

php - 使用 json 在数据库上插入多个复选框

mysql - mysqldump 和 load 如何影响 Rails 架构和迁移?

mysql - mysql数据库的源代码在哪里下载