如何将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方法外,一切都很好。