2017-05-04 45 views
0

我正在努力尋找一個查詢。我無法把頭圍住它。Mysql查詢 - 連接,子查詢,如果存在

我有4個表:庫存,款式,尺寸,style_sizes

清單包含列user_id說明,樣式,尺寸等 風格包含列:style_id,風格(樣式的名稱)等 尺寸包含列:size_id,大小等(SM,MD,LG等) style_sizes包含列:style_size_id,style_id,size_id(這是列出可供選擇的款式大小)

我需要的是列出所有庫存user_id = x和style = y(不是style_id),其中用戶具有size並按size_id排序。

目前,即使用戶沒有任何尺寸,它也會顯示可用於該樣式的所有尺寸。

這裏查詢到目前爲止...

SELECT i.*, st.*, ss.* 
      FROM inventory as i 
      JOIN style as st 
      ON i.style = st.style 
      JOIN style_sizes as ss 
      ON st.style_id = ss.style_id 
      WHERE i.user_id = $user_id AND i.style = :style 

我很接近,但我不知道在哪裏可以從這裏走。先謝謝了。

+0

您通常應該使用ID作爲外鍵,而不是名稱。 – Barmar

+0

是的。但變量被調用的方式我需要使用style而不是style_id。 – foxtangocharlie

+0

我在談論架構。您仍然可以在'WHERE'子句中使用'style',但連接應該使用ID。 – Barmar

回答

0

您需要在聯接中包含size_id,因此您只能獲取該用戶的尺寸。

SELECT i.*, st.*, ss.* 
FROM inventory as i 
JOIN style as st 
    ON i.style = st.style 
JOIN style_sizes as ss 
    ON st.style_id = ss.style_id AND i.size_id = ss.size_id 
WHERE i.user_id = :user_id AND i.style = :style 
+0

沒有i.size_id。所以我加入了尺寸並將i.size_id = ss.size_id更改爲si.size_id。非常感謝。我需要的只是「和」。 – foxtangocharlie

+0

選擇I。*,ST *,β* 從庫存,因爲我 JOIN風格爲ST ON i.style = st.style \t \t JOIN尺寸爲SI \t \t ON i.size = si.size JOIN style_sizes as ss ON st.style_id = ss.style_id AND si.size_id = ss.size_id WHERE i.user_id = $ user_id AND i.style =:style – foxtangocharlie

+0

如果您發佈完整模式,我會更容易必須猜測外鍵是什麼。什麼是「si」表格? – Barmar