检查mysql表中json的json上包含的json

检查mysql表中json的json上包含的json,mysql,json,Mysql,Json,我的表中有json数据,其中再次包含json值,如下面的示例数据所示 这是laravel审核,审核表新值列(类型:文本)记录 但对于这个特殊的例子,我没有使用Elount或查询生成器,它只是一个原始查询 {“视频状态ID”:“[6,8,14,29]”} 现在我想看看这里面有没有8个 我试过了 select * from audits WHERE JSON_CONTAINS(new_values, '8', '$.video_status_ids') 及 我尝试了json\u搜索 select*

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

这是laravel审核,审核表
新值
列(类型:文本)记录 但对于这个特殊的例子,我没有使用Elount或查询生成器,它只是一个原始查询

{“视频状态ID”:“[6,8,14,29]”}

现在我想看看这里面有没有8个

我试过了

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

我尝试了
json\u搜索

  • select*from audits WHERE JSON_SEARCH(新的_值,'all','8','video_status_id','$[*])

  • select*from audits WHERE JSON_SEARCH(新的_值,'all','8',NULL,$[video_status_id.*])

  • SELECT*FROM audits WHERE JSON_SEARCH(新的_值,'all','8',NULL',$.video_status_id.*)

  • 正在获取0个记录

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


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

    如果您查看以下文档:

    通过返回1或0指示给定候选JSON文档是否包含在目标JSON文档中

    它只能检查键的存在,而不能搜索数组

    但是,该职能:

    返回JSON文档中给定字符串的路径

    这就是你需要的。记住将路径作为最后一个参数传递,因为数组不是根元素

    Database.guide有一篇非常好的文章介绍了如何使用JSON_搜索(包括语法帮助和示例):

    您的问题是,JSON数据中的“数组”实际上是一个字符串(请注意它周围的双引号)。所以要在它里面搜索,首先需要
    JSON\u EXTRACT
    ,然后
    JSON\u UNQUOTE
    it:

    SELECT JSON_CONTAINS(JSON_UNQUOTE(JSON_EXTRACT(new_values, '$.video_status_ids')), '8')
    FROM audits
    
    您还可以对
    JSON\u UNQUOTE(JSON\u EXTRACT())
    使用速记
    ->

    工作溶液

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

    正如您所建议的,我尝试使用JSON_搜索,但出现错误,我已编辑了我的问题,m请您检查一下好吗?我使用的wit错误,因此已更正,但仍得到0条记录。这是不正确的。尝试
    SELECT JSON_CONTAINS('[6,8,14,29]','8')
    您将得到1(true)。对于这两个查询,我将得到一组
    null
    s和
    0
    s。@PrafullaKumarSahu刚刚意识到我使用了
    new_value
    而不是
    new_value
    ,您解决了吗?还有,这是json中的json,而不是json中的数组。@PrafullaKumarSahu您的数据与我的演示有什么不同?它在那里工作得很好…@PrafullaKumarSahu,不管它是数组还是JSON(在本例中,它们是相同的),因为它是带引号的,您需要提取它并取消引号,然后才能搜索它。
    SELECT JSON_CONTAINS(new_values->>'$.video_status_ids', '8')
    FROM audits
    
    SELECT * FROM audits WHERE JSON_CONTAINS(new_values->>'$.video_status_ids', '8')