[英]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.