2013-11-25 27 views
1

我想這是一個簡單而愚蠢的問題,但考慮到這個MySQL「購買」表(其中的p_id是自動遞增):加入和過濾兩套同桌的

+---------+-------------+---------------+---------+ 
| p_id | item_id | user_id  | count | ... 
+---------+-------------+---------------+---------+ 
|  1 | 4   |    1 |  22| 
|  2 | 4   |    2 |  1| 
|  3 | 1   |    1 |  1| 
|  4 | 0   |    3 |  1| 
|  5 | 3   |    1 |  182| 
|  6 | 0   |    4 |  1| 
|  7 | 3   |    2 |  7| 
|  8 | 3   |    2 |  14| 
+---------+-------------+---------------+---------+ 

什麼是適當的方式(查詢)獲取id爲1和2的用戶購買相同商品的行,並且僅檢索他們上次購買這些商品的行? 結果應該是這樣的:

+---------+-------------+---------------+---------+ 
| p_id | item_id | user_id  | count | ... 
+---------+-------------+---------------+---------+ 
|  1 | 4   |    1 |  22| 
|  2 | 4   |    2 |  1| 
|  5 | 3   |    1 |  182| 
|  8 | 3   |    2 |  14| 
+---------+-------------+---------------+---------+ 

非常感謝和抱歉,我的英語不好!

回答

1

試試這個

SELECT p.p_id,p.item_id,p.user_id,p.`count` 
FROM purchase p, 
    (SELECT MAX(P1.p_id)as p_id,item_id,user_id 
    FROM purchase P1 
    WHERE EXISTS (SELECT 1 FROM purchase P2 
        WHERE P2.item_id = P1.item_id 
        AND P2.user_id <> P1.user_id 
        AND P2.user_id IN (1,2)) 
    AND P1.user_id IN (1,2) 
    GROUP BY item_id,user_id)as result 
WHERE result.p_id = p.p_id 
ORDER BY p.p_id; 

結果

1|4|1|22 
2|4|2|1 
5|3|1|182 
8|3|2|14 
+0

葉sqlFiddle網站只是再次上升。這裏是[sqlFiddle示例](http://sqlfiddle.com/#!2/284fab/1/0) –