mysql - MariaDB/MySQL 选择查询将 ids 的 json 数组替换为连接值
问题描述
我对数据库查询不太熟悉,但我想做以下事情:在表中,我存储了一列标签 ID,例如:[1,6,8]
并且我希望"Music, Dance, Pop"
在我的选择查询中返回。
我没有设计数据库架构,也不允许修改它。
我想这样做的原因是这个查询的响应将直接发送到客户端进行表渲染,并且使用当前的 ORM 检索(PHP Laravel),这需要很长时间才能为每一行检索相同的相关模型。所以我想知道这样的查询是否可行。
我的架构看起来像这样:
帖子
id | name | ... | tag_ids (JSON array) | ...
标签
id | name
我曾想过使用JSON_REPLACE
,但根本不知道如何解决这个问题。在没有代码来发布处理结果的普通 SQL 中,这甚至可能吗?
解决方案
我不允许修改它
理想情况下,您可能会考虑对数据进行规范化,这样可以更轻松地处理此问题。话虽如此,在 JSON 函数的帮助下,我们可以尝试将连接与聚合相结合:
SELECT
p.id,
p.name,
GROUP_CONCAT(t.name) AS tag_names
FROM posts p
LEFT JOIN tags t
ON JSON_SEARCH(p.tag_ids, 'one', t.id) IS NOT NULL
GROUP BY
p.id,
p.name;
演示
推荐阅读
- flutter - Flutter web 中的 Firebase Phone 身份验证
- ruby-on-rails - 如何从 Rails 中的 npm 包加载 svg?
- .net-core - EF Core 3.18 从相关表中获取总和和计数
- mysql - 非过程语句中的 MySQL 条件检查
- eloquent - Laravel eloquant belongsToMany 获取记录属于关系
- reactjs - 如何在列内的渲染中传递函数(范围问题)
- python-3.x - 比较 datetime.now 和 EC2 映像 creation_date 的问题
- http - 我无法更改 NextJS 项目中的 HTTP 标头
- java - 尝试使用 jGRASP 进行编译时出现错误,不知道如何修复
- python - Pandas:折叠多索引数据框中的行