MariaDB / MySQL选择查询将ID的json数组替换为串联值

时间:2019-08-16 04:50:29

标签: mysql sql mariadb

我对数据库查询不太熟悉,但是我想做以下事情:在一个表中,我存储了一列标记ID,例如:[1,6,8],并且我希望返回{{1} },例如在我的选择查询中。

我没有设计数据库架构,也不允许修改它。

我想这样做的原因是该查询的响应将直接发送到客户端以进行表呈现,并且使用当前的ORM检索(PHP Laravel),这需要很长时间来检索相同的相关模型每行。 所以我想知道是否可以进行这样的查询。

我的架构如下所示:

帖子

"Music, Dance, Pop"

标签

id | name | ... | tag_ids (JSON array) | ...

我曾经考虑过使用id | name ,但完全不知道如何解决此问题。甚至在没有代码来对结果进行后期处理的普通SQL中,这是否有可能?

1 个答案:

答案 0 :(得分:1)

  

并且我不允许对其进行修改

理想情况下,您可以考虑对数据进行规范化,这将使处理此问题更加容易。话虽这么说,借助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