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


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

输出:

|事件标识 |事件名称 |             去 ||---------|-----------|--------------------||      1 |     测试 |测试名称2,测试名称 |

下面是一个 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

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