mysql - MariaDB/MySQL 选择查询将 id 的 json 数组替换为连接值

标签 mysql sql mariadb

我不太熟悉数据库查询,但我想执行以下操作:在一个表中,我存储了一列标签 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/

相关文章:

php_network_getaddresses : getaddrinfo failed: nodename nor servname provided, 或未知失败?

sql - 为什么我的 IDENTITY 列值存在间隙?

mysql group by column1,column2 'Desc\|asc' 没有报错

postgresql - Sequelize : Many-To-Many relation between MariaDB and Postgres

mysql timestampdiff 总是返回 null?

php - 如果不存在,则为 'INSERT INTO' 的另一种方法

c# - 按邮政编码查找产品 |半正弦算法 |表现

mysql - SQL查询以根据通配符替换字符串

mysql - 在不使用类型的情况下删除 SQL 查询中的查询

java - 如何将JSON数据插入到sql server而不转换为Java bean