没有不值得去解决的问题,也没有不值得去学习的技术!

在 MySQL 5.7 中,如何在 json 字段上查询同一层级结构中的多个相同字段的值?

在 json 字段中的值如下所示。需要查询的字段:$.current.sections.announcement-bar.blocks.*.settings.text。其中 * 所对应的字段 key 是未知的
1、在 json 字段中的值如下所示。需要查询的字段:$.current.sections.announcement-bar.blocks.*.settings.text。其中 * 所对应的字段 key 是未知的。如图1
在 json 字段中的值如下所示。需要查询的字段:$.current.sections.announcement-bar.blocks.*.settings.text。其中 * 所对应的字段 key 是未知的
图1
<pre class="wp-block-syntaxhighlighter-code">

{
  "current": {
    "sections": {
      "announcement-bar": {
        "type": "announcement-bar",
        "blocks": {
          "announcement-bar-0": {
            "type": "announcement",
            "disabled": false,
            "settings": {
              "link": "/",
              "text": "❤Free Shipping Over $100.0❤",
              "image": null,
              "text_color": "#ffffff",
              "mobile_text": "",
              "mobile_image": null,
              "background_color": "#000000"
            }
          },
          "6oaZmAscmONct-2pLAp5O": {
            "type": "announcement",
            "disabled": false,
            "settings": {
              "link": "/",
              "text": "<p>❤Free Shipping Over $100.0❤ 1</p>",
              "image": null,
              "text_color": "#ffffff",
              "mobile_text": "",
              "mobile_image": null,
              "background_color": "#000000"
            }
          },
          "JrFCMGW-EBnVZQ3sQT-WP": {
            "type": "announcement",
            "disabled": false,
            "settings": {
              "link": "/",
              "text": "<p>❤Free Shipping Over $100.0❤ 2</p>",
              "image": null,
              "text_color": "#ffffff",
              "mobile_text": "",
              "mobile_image": null,
              "background_color": "#000000"
            }
          }
        },
        "disabled": false,
        "settings": {
          "sticky": false,
          "homepage_only": false
        },
        "block_order": [
          "announcement-bar-0",
          "6oaZmAscmONct-2pLAp5O",
          "JrFCMGW-EBnVZQ3sQT-WP"
        ]
      }
    },
    "radius__image": 5,
    "radius__button": 6
  }
}

</pre>
2、最后整理的 SQL 如下,查询结果为数组,如果不存在,则为 NULL。如图2
最后整理的 SQL 如下,查询结果为数组,如果不存在,则为 NULL
图2


SELECT
	JSON_EXTRACT( `schema`, '$.current.sections."announcement-bar".blocks.*.settings.text' ) 
FROM
	`theme_asset2` 
WHERE
	`theme_id` = '9a1ce422-a2cc-4559-9c9b-2edd1c50db87' 
	AND `asset_key` = 'config/settings_data.json'


<pre class="wp-block-syntaxhighlighter-code">

["❤Free Shipping Over $100.0❤", "<p>❤Free Shipping Over $100.0❤ 1</p>", "<p>❤Free Shipping Over $100.0❤ 2</p>"]

</pre>
3、announcement-bar 需要加上双引号,否则会报错:Invalid JSON path expression. The error is around character position 35.。如图3
announcement-bar 需要加上双引号,否则会报错:Invalid JSON path expression. The error is around character position 35.
图3

需要长期技术维护或远程问题排查?

我是拥有 15+ 年经验的 PHP / Go 后端工程师,长期关注已有系统维护、Bug 修复、性能优化、服务器排查、WordPress 网站维护和小功能迭代。

如果你的项目遇到以下情况,可以先从一次小问题排查开始合作:

  • ✅ PHP / Laravel / Yii2 老项目无人维护
  • ✅ Go / Gin 后端接口需要排查或优化
  • ✅ WordPress 网站访问慢、报错或插件冲突
  • ✅ Nginx / MySQL / Redis / Linux 服务器异常
  • ✅ CDN / Cloudflare / DNS / HTTPS 配置问题
  • ✅ 需要长期远程技术支持或兼职维护

更多介绍请查看:关于我 & 合作

微信:13980074657
邮箱:shuijingwanwq@gmail.com
Telegram:@shuijingwan
GitHub:https://github.com/shuijingwan

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理