我遇到了几天无法解决的问题。 我了解基本的 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/