我的表中有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/