我的表中有json数据,其中再次包含json值,例如以下示例数据

这是laravel审核,审核表new_values列(类型:文本)记录
但对于这种特殊情况,我没有使用雄辩的或查询生成器,它只是一个原始查询

{"video_status_ids":"[6, 8, 14, 29]"}

现在我要检查它是否有8个。

我试过了

select * from audits WHERE JSON_CONTAINS(new_values, '8', '$.video_status_ids')




JSON_CONTAINS(audits.new_values, CAST(' . $status . ' AS json), "$.video_status_ids")';


我尝试了json_Search


select * from audits WHERE JSON_SEARCH(new_values, 'all', '8', 'video_status_ids', '$[*]');
select * from audits WHERE JSON_SEARCH(new_values, 'all', '8', NULL, '$[video_status_ids.*]');
SELECT * FROM audits WHERE JSON_SEARCH(new_values, 'all', '8', NULL, '$.video_status_ids.*')


取得0条记录

和其他一些查询,但无法获得预期的结果。

通过引用this,但我得到0条记录。

最佳答案

您的问题是JSON数据中的“数组”实际上是一个字符串(请注意在其周围用双引号引起来)。因此,要在其中进行搜索,您首先需要先JSON_EXTRACT然后JSON_UNQUOTE

SELECT JSON_CONTAINS(JSON_UNQUOTE(JSON_EXTRACT(new_values, '$.video_status_ids')), '8')
FROM audits


您还可以将速记->>用作JSON_UNQUOTE(JSON_EXTRACT())

SELECT JSON_CONTAINS(new_values->>'$.video_status_ids', '8')
FROM audits


Demo on dbfiddle

工作方案

SELECT * FROM audits WHERE JSON_CONTAINS(new_values->>'$.video_status_ids', '8')

关于mysql - 检查mysql表中json的json上的json_contains,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55255513/

10-12 15:32