如何将MYSQL中的重复元素转换为数组?

如何将MYSQL中的重复元素转换为数组?,mysql,sql,Mysql,Sql,目前我有以下查询: SELECT c.Permlink , c.ParentID , c.AuthorID , u.Username AS Author , c.Title , c.Body , c.Metadata , c.PostTime , v.VoterID , v.VoteValue , voterID.Username AS Voter FROM comments c LEFT

目前我有以下查询:

SELECT c.Permlink
     , c.ParentID
     , c.AuthorID
     , u.Username AS Author
     , c.Title
     , c.Body
     , c.Metadata
     , c.PostTime
     , v.VoterID
     , v.VoteValue
     , voterID.Username AS Voter
  FROM comments c
  LEFT 
  JOIN deleted_comments d
    ON c.Permlink = d.Permlink
  LEFT 
 JOIN votes v
    ON c.Permlink = v.Permlink 
 JOIN users u
    ON u.id = c.AuthorID 
  LEFT 
  JOIN users As voterID 
    ON voterID.ID = v.VoterID
 WHERE c.AuthorID = 88077 
  AND c.ParentID IS NULL
  AND d.Permlink IS NULL
我得到以下结果:

[
    {
        "Permlink" : 3,
        "ParentID" : null,
        "AuthorID" : 88077,
        "Author" : "rishi556",
        "Title" : "",
        "Body" : "foxon",
        "Metadata" : "{}",
        "PostTime" : 1589475759,
        "VoterID" : 88077,
        "VoteValue" : 1,
        "Voter" : "rishi556"
    },
    {
        "Permlink" : 5,
        "ParentID" : null,
        "AuthorID" : 88077,
        "Author" : "rishi556",
        "Title" : "",
        "Body" : "foxonier?",
        "Metadata" : "{}",
        "PostTime" : 1589475774,
        "VoterID" : 1278255,
        "VoteValue" : 1,
        "Voter" : "gamer556"
    },
    {
        "Permlink" : 5,
        "ParentID" : null,
        "AuthorID" : 88077,
        "Author" : "rishi556",
        "Title" : "",
        "Body" : "foxonier?",
        "Metadata" : "{}",
        "PostTime" : 1589475774,
        "VoterID" : 88077,
        "VoteValue" : 1,
        "Voter" : "rishi556"
    },
    {
        "Permlink" : 9,
        "ParentID" : null,
        "AuthorID" : 88077,
        "Author" : "rishi556",
        "Title" : "",
        "Body" : "does this work?",
        "Metadata" : "{}",
        "PostTime" : 1589475858,
        "VoterID" : null,
        "VoteValue" : null,
        "Voter" : null
    }
]
为了减少重复,我希望将VoteID、VoteValue、Voter中的数据放入一个数组中,例如使用Permlink:5:

[
    {
        "Permlink" : 5,
        "ParentID" : null,
        "AuthorID" : 88077,
        "Author" : "rishi556",
        "Title" : "",
        "Body" : "foxonier?",
        "Metadata" : "{}",
        "PostTime" : 1589475774,
        "Votes" : [{"VoterID" : 1278255,"VoteValue" : 1,"Voter" : "gamer556"},{"VoterID" : 88077, "VoteValue" : 1,"Voter" : "rishi556"} ]

    }
]
而对于votes中有null表示它还没有收到投票的人,它应该只是一个空数组


要做到这一点,我需要向查询中添加什么?或者,如果对查询进行更改,我就不可能在代码中进行操作了吗?

好的,所以我看到数组表是一个单独的表。这意味着您有两种选择来解决此问题

一,。在您的代码中未经测试

理想情况下,您可以将其分为两个查询,一个查询获取评论,另一个查询获取对它的投票

选择c.Permlink ,c.ParentID ,c.AuthorID ,u.用户名为作者 ,c.标题 ,c.正文 ,c.元数据 ,c.PostTime 来自评论c 左边 加入已删除的注释 关于c.Permlink=d.Permlink 加入用户u 在u.id=c.AuthorID上 并且c.ParentID为空 d.Permlink为空 然后在该查询中,循环遍历投票表以获得投票

选择voces.VoterID,voces.VoteValue,选择Users.username FROM Users WHERE.ID=voces.VoterID FROM voces WHERE comments.Permlink=voces.Permlink 二,。纯MySQL

如果您必须在MySQL中执行此操作,或者有充分的理由这样做,那么这是一个查询,它将为您提供一个包含所有投票的JSON字符串

选择 评论:Permlink, comments.ParentID, comments.authord, users.Username作为作者, 评论.标题, 评论.机构, 评论.元数据, 评论。PostTime, CONCAT[,, 选择组_CONCATCONCAT'{voter_id:',vots.VoterID',voteValue:',vots.voteValue',voter_name:',从Users.id=vots.VoterID',的用户中选择Users.username'} 从哪里投票 comments.Permlink=voces.Permlink,]作为投票数据 从…起 评论 左连接 已删除的评论 在…上 comments.Permlink=已删除\u comments.Permlink 参加 使用者 在…上 users.id=comments.AuthorID 哪里 comments.AuthorID=0,comments.ParentID为NULL,deleted\u comments.Permlink为NULL
MySQL不知道数组是什么,也不在乎,它只能用行和列来表示。您的意思是在应用程序层还是脚本层?mysql不支持数组数据类型。如果我们返回JSON MySQL 5.7+,我们可以使用JSON_ARRAYAGG函数,但问题中发布的结果集在我看来不像JSON,也不像SQL返回的正常结果集,更像是某种编程语言转储的数据结构的表示,not SQL MySQL有一个GROUP_CONCAT函数,返回一个VARCHAR而不是数组,但这将返回SQL结果集中的一列,而不是结果显示。您可以使用PHP或Python之类的编程语言创建分组数组。请参阅,了解如何在PHP中实现它。除了字段名是不正确的纯MYSQL方法外,一切都很好。