我們有兩個表:「有條件加入」在MySQL - (不同的連接條件下)
產品和商店
一個店基本上可以有很多產品。我們正在從產品表中進行選擇,但我們將其加入到商店表中,以便我們只選擇來自當前「活躍」商店的產品。
但是,我們只希望發生這種行爲,如果它不是查看給定產品的商店所有者。
所以,基本上我想要做的是有一個查詢,我們可以提供當前登錄的user_id到查詢,並對商店表進行連接。如果提供的user_id匹配stores表中的那個,那麼它就是店主 - 我們應該允許他們查看產品[這將基本上以不同的條件加入]。如果user_id與stores表中的不同,那麼它是普通用戶,不應該被允許查看產品。
這裏是我的兩個查詢:
店主
SELECT products.* from products
INNER JOIN stores
ON stores.id = products.store_id
AND stores.user_id = <supplied userid>
普通用戶
SELECT products.* from products
INNER JOIN stores
ON stores.id = products.store_id
AND stores.is_active = 1
我基本上要推出這些成一個查詢,如果可能的話。
你對這兩張表有什麼指標?使用'UNION ALL'(或者'UNION'作爲不同的記錄)可以更好地使用任何索引。您將使用更多的代碼,您可能會得到更好的查詢計劃。 – GarethD
在[本例中](http://sqlfiddle.com/#!2/37233/1)中詳細說明,聯合查詢能夠在'is_active'和'user_id'上使用索引,使用OR的則不使用這些索引只是執行表掃描。在一個數據集中,這個例子的大小是無關緊要的,在一個更大的數據集中,這可能會產生顯着的差異。 – GarethD
所以你想要如果ID被發現只能看到他的物品,或看到他的+所有其他? – AdrianBR