2014-07-05 28 views
0

我有一個數據庫usersuser items其中每個用戶可以有多個項目鏈接到他們的帳戶。在mysql中返回一對多行無重複

問題IM我目前SELECT查詢其是我想一次返回每個用戶,但與所有的行綁定到該用戶的排序是這樣的:

User 1 ¬ 
     item id 1 
     item id 2 
     item id 3 
User 2 ¬ 
     item id 1 
     item id 3 
     etc 

這將是我理想中獲取結果,因此我可以通過簡單的循環正確處理數據...所以我嘗試了一個left join,但這沒有奏效。

我想知道如何獲取像上面那樣的結果?這是我目前的查詢:

SELECT U.user_id, I.item_name 
FROM users U 
LEFT JOIN user_items UI ON U.user_id = UI.user_id 
INNER JOIN items I ON I.item_id = UI.item_id 

當前,如果用戶有兩個或更多的項目,我得到重複數據的用戶ID,我試圖避免。

回答

0

如果我正確地理解了這個問題,您正在嘗試遍歷主/關係。

無論何時使用JOIN,引擎都會輸出每一組匹配的行。在這種情況下,如果用戶有一個以上的項目,它將與其中的每一個一起出現。這不是你可以避免的,因爲你不能有一個列數不定的結果集,或者「如果前一個列的值相同,不要輸出這個列」。我不會嘗試解決它調整查詢。如果您想讓每個沒有任何物品的用戶也參加,LEFT JOIN只會幫助您。

爲了獲得您想要的輸出,您需要使用結果集。例如,您可以通過user_id來排序結果,然後遍歷該集合並僅在其更改時纔打印user_id。另一種選擇是使用2個查詢:一個用於獲取每個用戶(如果需要,可以將其縮小到每個至少有一個項目的用戶),另一個用於獲取每個用戶的項目,從第一個查詢。

這兩種解決方案都要求您通過存儲過程或編程語言來處理結果。

希望這會有所幫助!

+0

嗯im驚訝MYSQL有這樣的限制= / – Sir