如何在mysql中统计json数组中某些值的计数?

如何在mysql中统计json数组中某些值的计数?
json数据如下:类型是json
image.png

我想统计比如一个集合中:{"3467562849402896", "3467562861985809","3465044211793921"}的每个元素被使用了几次?上述集合中的元素个数是不固定的,是输入的参数
方案:
我知道mysql8的JSON_TABLE是可以的,但是我的版本是5.7
我想到一个方案是这个:先用下面的sql找出来谁用了这个id,然后在代码中处理统计次数

where JSON_CONTAINS(tags ,'"3467562849402896"' , '$')
    OR JSON_CONTAINS(tags, '"3467562861985809"', '$')
    OR JSON_CONTAINS(tags, '"3465044211793921"', '$');

还没有更好的方案呢?

阅读 549
2 个回答
  • 因为要每个元素 ,OR 的只能查到 一共 有多少行 有交集
SELECT
    count( JSON_SEARCH( tags, 'one', "3467562849402896" ) ),
    count( JSON_SEARCH( tags, 'one', "3467562861985809" ) ),
    count( JSON_SEARCH( tags, 'one', "3465044211793921" ) ) 
FROM
    XXXXXXXXXX

找到了另外的一个解决办法:行转列

SELECT 
    TRIM(BOTH '"' FROM JSON_EXTRACT(t1.name_s, CONCAT('$[',h.help_topic_id,']'))) AS `name`
FROM (
    SELECT 
        JSON_EXTRACT(tags, '$[*]' ) AS name_s
    FROM xxxx
    ) AS t1
JOIN mysql.help_topic AS h ON h.help_topic_id < JSON_LENGTH(t1.name_s);

image.png

参考文章:https://blog.csdn.net/u011123972/article/details/132321483

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏