繁体   English   中英

将一个查询的结果用作另一个查询的子数组

[英]Using the results of one query as a subarray in the results of another

我几乎可以肯定我的措辞不正确,但是我想做的是结合两个联接表的结果,但不重复。

我有两个表, eventsgoing 我试图做的是有一个查询,从获取行events ,那么作为子阵列,来自列出所有的行going具有相同的EventID 就像是:

 "1":[
   {
   EventID: '1'
   EventName: 'test'
   Going: {
     UserID:'testname'
     UserID:'testname2'
     }
   }
 ]

或者可能将所有用户名都放在一行,例如UserID: 'testname', 'testname2'

我正在使用此查询:

"SELECT * FROM events AS ev INNER JOIN going AS go ON ev.EventID = go.EventID WHERE ev.EventID = $eventID"

而我却得到如下结果:

"1":[
   {
   EventID: '1'
   EventName: 'test'
   UserID:'testname'
   }
   {
   EventID: '1'
   EventName: 'test'
   UserID:'testname2'
   }
]

有什么方法可以删除所有重复的数据,而是将其分组在一个子数组中?

请原谅任何糟糕的编码/格式,我是一个完整的SQL新手,但即使有可能,我似乎也找不到如何执行此操作的方法。 希望我能传达我的意图。

先感谢您!

你可以这样做

SELECT e.EventID, e.EventName, GROUP_CONCAT(g.UserID) Going
  FROM events AS e INNER JOIN going AS g
    ON e.EventID = g.EventID 
 WHERE e.EventID = ?
 GROUP BY e.EventID, e.EventName

输出:

| EVENTID | EVENTNAME |              GOING |
|---------|-----------|--------------------|
|       1 |      test | testname2,testname |

这是一个SQLFiddle演示

然后在遍历结果集并生成JSON时, explode() going列。


附带说明: 停止使用查询字符串插值。 相反,要学习和利用准备好的陈述

您可以使用MySQL的GROUP_CONCAT ,如下所示:

SELECT ev.EventID, ev.EventName, GROUP_CONCAT(go.UserID) AS UserIDs
FROM events AS ev INNER JOIN going AS go ON ev.EventID = go.EventID
WHERE ev.EventID = $eventID
GROUP BY ev.EventID, ev.EventName

在这里查看工作提琴: http ://sqlfiddle.com/#!2/ aa4875/11

您不能使用一个查询来执行此操作。 您需要从事件表中获取eventId及其相关数据。 然后,使用eventId查询您的表,并通过编程逻辑创建所需的array / json。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM