You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中按Gallery表JSON格式language字段分组查询的实现示例

按JSON数组字段分组查询的可行性及实现示例

可行,只要你的数据库支持JSON类型操作,就能按language字段的JSON数组内容进行分组查询。以下是主流数据库的实现示例:

MySQL 实现

假设Gallery表的language字段存储格式为["zh-CN", "en-US"]这类JSON数组:

按原始JSON数组分组(区分元素顺序)

直接将JSON字段作为分组依据,MySQL会按JSON的语义内容进行比较:

SELECT language, COUNT(*) AS record_count
FROM Gallery
GROUP BY language;

忽略数组元素顺序分组

如果需要将元素顺序不同但内容相同的数组归为同一组,可先展开数组、排序后重新聚合:

SELECT 
  JSON_ARRAYAGG(DISTINCT lang ORDER BY lang) AS sorted_language,
  COUNT(*) AS record_count
FROM Gallery,
     JSON_TABLE(language, '$[*]' COLUMNS(lang VARCHAR(50) PATH '$')) AS lang_items
GROUP BY sorted_language;

PostgreSQL 实现

推荐将language字段设为jsonb类型(比json性能更优,支持语义化比较):

按原始JSON数组分组(区分元素顺序)

SELECT language, COUNT(*) AS record_count
FROM Gallery
GROUP BY language;

忽略数组元素顺序分组

通过展开数组、排序后重新聚合为JSON数组,实现无序分组:

SELECT 
  jsonb_agg(DISTINCT lang ORDER BY lang) AS sorted_language,
  COUNT(*) AS record_count
FROM Gallery,
     jsonb_array_elements(language) AS lang_items(lang)
GROUP BY sorted_language;

注意:如果使用json类型而非jsonb,PostgreSQL会按JSON的字符串字面量进行分组,格式差异(如空格、元素顺序)会导致同一逻辑内容被分为不同组,建议优先使用jsonb。

内容的提问来源于stack exchange,提问作者kralyolda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:50:33