簡體   English   中英

如何從多個關系MySQL表輸出多維數組?

[英]How do I output a multidimensional array from multiple relational MySQL tables?

我有三個表:事件,事件和用戶。 事件表存儲與特定事件(名稱,日期等)相關的信息,用戶表存儲用戶信息(名稱,年齡等),事件表是兩者之間的關系,僅存儲Event_ID和User_ID。

我需要列出特定用戶的所有事件(讓我們說User_ID = 20),並在每個事件下方都顯示該事件中的所有其他用戶。

例如,假設用戶要去“史蒂夫誕辰”,“返鄉聚會”和“市區藝術表演”。 我需要顯示:

史蒂夫(Steve)誕辰-進行中:莎拉(Sarah),邁克(Mike),湯姆(Tom)返校派對-進行中:邁克(Mike),安迪(Andy),羅傑(Roger),史蒂夫藝術展(Steve Art Show)

我試過先查詢數據庫以在事件表中找到與User_ID匹配的所有Event_ID。 然后,我采用該數組,並為每個數組找到event_name和event_date。 但是我太困惑自己了,試圖弄清楚如何找到每個人也去參加那個活動。

任何人都可以理解我正在嘗試做什么,並提出一種實現它的方法嗎?

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

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)。

行中將有冗余數據。 您將要通過迭代行來對結果數組進行后期處理。

$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;

}

這種循環實際上很慣用。 您可能需要編寫/查找常規的“重新組合”功能。

就像是

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;     

第一次加入將創建關系“其他人將要參加同一事件”。 子句過濾掉相同的用戶(如果列表是為史蒂文創建的,則他不會出現在“其他人”中),並且僅選擇史蒂文參加的活動。 第二和第三個聯接只是將用戶和事件信息添加到ID中。 使用事件(使用分隔)對事件進行分組可確保每個事件獲得一行(“人員也將匯總”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM