我不太熟悉数据库查询,但我想执行以下操作:在一个表中,我存储了一列标签 ID,如:[1,6,8]
例如,我希望在我的选择查询中返回 "Music, Dance, Pop"
。
数据库架构不是我设计的,不允许修改。
我想这样做的原因是这个查询的响应将被直接发送到客户端进行表格渲染,并且使用当前的 ORM 检索(PHP Laravel),这需要很长时间来检索相同的相关模型每一行。 所以我想知道这样的查询是否可行。
我的架构看起来像这样:
帖子
id | name | ... | tag_ids (JSON array) | ...
标签
id | name
我想过使用 JSON_REPLACE
,但完全不知道如何解决这个问题。在没有代码对结果进行后处理的情况下,这甚至可以在纯 SQL 中实现吗?
最佳答案
and I'm not allowed to modify it
理想情况下,您可以考虑规范化数据,这样可以更轻松地处理此问题。也就是说,在 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;
Demo
关于mysql - MariaDB/MySQL 选择查询将 id 的 json 数组替换为连接值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57519025/