代码之家  ›  专栏  ›  技术社区  ›  Evol Rof

如何使用mysql中的通配符查询json数据

  •  1
  • Evol Rof  · 技术社区  · 6 年前

    我正在使用laravel和mysql 5.7以及json。

    mysql> select goods from packet_code where id=582 \G
    *************************** 1. row ***************************
    goods: 
    [
     {"code": "S87719300077661", "size": "7", "loged_by": "93,xx"}, 
     {"code": "S87719300094874", "size": "9", "loged_by": "93,xx"}, 
     {"code": "S87719300112648", "size": "11", "loged_by": "93,xx"}
    ]
    1 row in set (0.05 sec)
    

    我试过这个问题;

    select * from packet_code where goods->'$[0].code'="S87719300077661;"

    它运行良好,我得到了一个结果。

    但问题是元素不是按顺序存储的,它可能存储在第二或第三个位置。

    当我尝试这个的时候

    select * from packet_code where goods->'$[*].code'="S87719300077661"; 我什么都没有。 此外,JSONèU还包含一些很好的功能:

    select *  from packet_code where JSON_CONTAINS(goods,'"S87719300077661"','$[0].code');
    

     select *  from packet_code where JSON_CONTAINS(goods,'"S87719300077661"','$[*].code');
    

    我有个错误:

    In this situation, path expressions may not contain the * and ** tokens.

    尝试改变 '$[0].code' $[0 to last].code

    1 回复  |  直到 6 年前
        1
  •  1
  •   wchiquito    6 年前

    SELECT `id`, JSON_PRETTY(`goods`)
    FROM `packet_code`
    WHERE JSON_SEARCH(
      `goods`,
      'all',
      'S87719300077661',
      NULL,
      '$[*].code') IS NOT NULL;
    

    看到了吗 dbfiddle