php - MySql 查询与 Json

标签 php mysql json

我遇到了几天无法解决的问题。 我了解基本的 MySql,但我尝试使用 SELECT 来恢复 JSON 中的数据。

我在数据库中有一个名为 home_slider 的表。

里面有以下列:

id_shop, id_lang, id_image and json_groups_id.

除了我通过json_econde插入文件的json_groups_id,都是INT字段。

“json_groups_id”字段中的 JSON 结构如下:

{"2": "Guest", "3": "Customer", "4": "Custom"}

所有这些数据都以简单的形式保存。

最后我发现自己的不同之处都是类似这样:

+------------+----------------+-----------------+-------------------------------+
|   shop_id  |    id_lang     |   id_image | json_groups_id                     |
+------------+----------------+-----------------+--------------------------------+
|       1    |        1       |      2     | {"2": "Guest", "3": "Customer"}     |
|       1    |        1       |      3     | {"1": "Visit", "4": "Other"}        |
|       1    |        1       |      4     | {"2": "Guest", "5": "Test"}
+-------------+----------------+-----------------+--------------------------------+

现在问题来了,给定一个类似于此 [2,5,4] 的数组。 我想检索“json_groups_id”字段中具有该键的所有行。 我试过 JSON_EXTRACT 但我做不到。 我可以使用什么样的选择? 谢谢 马里奥

最佳答案

您应该规范化您的数据库,使其至少具有第三范式。所以原子数据将位于一个单独的字段中。 然后您可以使用 WHERE 条件轻松选择数据, 但作为拐杖,您可以对当前结构使用 LIKE

SELECT * FROM `table` WHERE `json_groups_id` LIKE '{"YOURNUMBER1"%' OR `json_groups_id` LIKE '{"YOURNUMBER2"%' OR `json_groups_id` LIKE '{"YOURNUMBER3"%'

此外,您可以尝试 JSON_CONTAINS() https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html

但这不是一个好的做法,恕我直言

关于php - MySql 查询与 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55223688/

相关文章:

php - 如何每隔x分钟自动删除?

mysql - 如何将 show partition query 与 select 语句结合使用以获取最新分区与表名

javascript - jquery 超大 stop_loop 重定向?

PHP 脚本未返回预期的 JSON 响应

PHP/MySQL - 将数组数据存储为 JSON,不好的做法?

php - 当日期字段中有时间和日期时,获取两个日期之间的 SQL 数据

PHPMailer 意外启动垃圾邮件

php - 查询查询查询

php - 自动增量主键重复输入错误?

php - 特殊字符在服务器上不起作用