首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从多个关系MySQL表中输出多维数组?

如何从多个关系MySQL表中输出多维数组?
EN

Stack Overflow用户
提问于 2010-01-29 16:27:56
回答 2查看 999关注 0票数 0

我有三个表:事件、事件和用户。事件表存储与特定事件相关的信息(名称、日期等),用户表存储用户信息(名称、年龄等),事件表是两者之间的关系,仅存储Event_ID和User_ID。

我需要列出特定用户的所有事件(假设User_ID = 20),并在每个事件中显示所有其他用户。

例如,假设用户要去“Steve的生日”、“返校派对”和“艺术展市中心”。我需要显示:

史蒂夫的生日-还有:萨拉,迈克,汤姆的返校派对-还有:迈克,安迪,罗杰,史蒂夫艺术展市中心-还有:萨拉

我尝试先查询数据库,在Events表中查找与User_ID匹配的所有Event_ID,然后获取该数组,并分别找到event_name和event_date。但我太迷惑自己了,试图弄清楚如何找到每个也去参加活动的人。

有没有人能理解我在做什么,并提出一个方法来完成它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-29 16:41:44

您可以在in子句中使用subselect,如下所示:

代码语言:javascript
复制
SELECT `event`.*, `user`.* from `user`,`user_event`, `event` 
WHERE `event`.`id` in (
   SELECT `user_event`.`event_id` from `user_event`, `user` 
   WHERE `user`.`id` = ?
)
AND `user`.`id` = `user_event`.`user_id`
AND `user_event`.`event_id` = `event`.`id`
ORDER BY `event`.`id`

它基本上是这样的:查找所有要参加以下事件的用户-事件列表可以通过获取joe将要参加的事件的event_ids来找到。

在子选择中,我没有拉入事件表,因为我从多对多表中获得了足够的信息( event_id)。

行中将有冗余数据。您将希望通过迭代各行来对结果数组进行后期处理。

代码语言:javascript
复制
$groupedArray = array();
foreach ($result as $item)
{
   if(!isset($groupedArray[$item['event_id']])
   {
       // Create an empty array if we don't have one for this grouping yet.
       $groupedArray[$item['event_id']] = array();
   }

   // Append the current item to the subarray.    
   $groupedArray[$item['event_id']][] = $item;

}

这种循环实际上是非常惯用的。您可能希望编写/查找一个通用的"regroup“函数。

票数 2
EN

Stack Overflow用户

发布于 2010-01-29 16:42:52

就像这样

代码语言:javascript
复制
SELECT 
  e.Name,
  Concat_WS(', ', u.Name) AS AlsoGoing
  /* maybe some more stuff */
FROM
  Events eu
LEFT JOIN Events a
  ON (eu.Event_ID = a.Event_ID)
LEFT JOIN Users u
  ON u.User_ID = a.User_ID
LEFT JOIN Event e
  ON (eu.Event_ID = e.Event_ID)
WHERE
  eu.User_ID = 20 /* or some other ID */
  AND a.User_ID <> eu.User_ID
GROUP BY
  eu.Event_ID;     

第一个连接创建了“还有谁要参加同一个活动”的关系。where-子句过滤掉相同的用户(如果列表是为Steven创建的,那么他不会出现在"who and‘s going“中),并且只选择Steven参加的活动。第二个和第三个连接只是将用户和事件信息添加到ID中。使用(分隔)对事件进行分组可以确保每个事件都有一行( "people also up")。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2160716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档