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

时间:2015-01-26 02:53:20

标签: php mysql

我几乎可以肯定我是错误地说这个,但我想要做的是结合两个连接表的结果,但没有重复。

我有两个表,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菜鸟但我似乎无法找到如果它甚至可能做到这一点。希望我正在传达我想要做的事情。

提前谢谢!

3 个答案:

答案 0 :(得分:3)

你可以这样做

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 演示

然后explode() going列,同时迭代结果集并生成JSON。


旁注:停止使用查询字符串插值。而是学习并使用prepared statements

答案 1 :(得分:1)

您可以使用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

答案 2 :(得分:-1)

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