2013-07-21 62 views
1

我有SQL顯示該活動的所有活動和相關管理員權限(如果有)。SQL JOIN查詢 - 鏈接四個表

當前的SQL代碼:

SELECT `activities`.*, `admins`.`admin_role_id` 
FROM (`activities`) 
LEFT JOIN `admins` ON `admins`.`activity_id`=`activities`.`id` AND admins.member_id=27500 
WHERE `activities`.`active` = 1 

返回:

ID |名稱|描述|活動| admin_role_id(或null)

然後我需要檢測它們是否是該活動中的活動成員。

我有以下SQL代碼:

SELECT DISTINCT `products`.`activity_ID` as joinedID 
FROM (`transactions_items`) 
JOIN `transactions` ON `transactions`.`id` = `transactions_items`.`id` 
JOIN `products` ON `products`.`id` = `transactions_items`.`product_id` 
JOIN `activities` ON `activities`.`id` = `products`.`activity_ID` 
WHERE `transactions`.`member_id` = 27500 
AND `activities`.`active` = 1 

有什麼辦法合併成一個SQL查詢這一點。由於JOIN的複雜性,我無法弄清楚如何使用正確的JOIN查詢。

請幫助,謝謝! :)

回答

1

嘗試這樣

SELECT `activities`.*, `admins`.`admin_role_id` 
FROM (`activities`) 
LEFT JOIN `admins` ON `admins`.`activity_id`=`activities`.`id` AND admins.member_id=27500 
    JOIN (`transactions_items` 
    JOIN `transactions` ON `transactions`.`id` = `transactions_items`.`id` 
    JOIN `products` ON `products`.`id` = `transactions_items`.`product_id`) 
ON `activities`.`id`=`products`.`activity_ID` 
WHERE `transactions`.`member_id` = 27500 
AND `activities`.`active` = 1 
+0

Nithesh ,感謝您嘗試解決方案,但我得到一個SQL錯誤附近: (JOIN('transactions_items') JOIN' transactions' ON' transactions'.''''' transactions_items'.'id' JOIN'products '開'產品' .'id' ='transactions_items'.'product_id') – BigDistance

+0

請嘗試在支架外面加入'join' – Nithesh

+0

我編輯了答案。你現在可以檢查嗎? – Nithesh

0

在我看來,這樣的查詢會稍微更容易理解和(我認爲)更嚴格地遵守規範...

SELECT c.* 
    , d.admin_role_id 
    FROM activities c 
    LEFT 
    JOIN admins d 
    ON d.activity_id = c.id 
    AND d.member_id = 27500 
    LEFT 
    JOIN products p 
    ON p.activity_ID = c.id 
    LEFT 
    JOIN transactions_items ti 
    ON ti.product_id = p.id 
    LEFT 
    JOIN transactions t 
    ON t.id = ti.id 
    AND t.member_id = 27500 
WHERE c.active = 1 
+0

謝謝,這是更容易理解,但它是返回超過500,00行,而不是100個活動? - 喬希。 – BigDistance

+0

因此,SELECT DISTINCT c。*會起作用。但這是最好的方式嗎? – BigDistance

+0

你告訴我! ;-) – Strawberry