2010-12-02 64 views
1

請問我能否幫助創建此查詢?在SQL中創建表

用戶預訂產品視頻插槽以宣傳一個產品視頻。預訂表捕獲這些預訂。預訂地點分配給用戶而不是產品或視頻。 用戶的排名第一的產品排名第一的視頻將是廣告的視頻。

登記表

id user_id position 
---- -----  --------  
1  100  1    
2  150  2    

用戶表 用戶可以有1-正預訂

id  name 
---- ---- 
100 John Smith 
150 Herby Brown 

產品表 用戶可以具有1-n的產物

id name  user_id rank 
--- ----  ------- ----  
1  bike  100  1    
2  stereo  100  2 
3  computer 100  3 
4  notebook 150  1 
5  scooter  150  2 

影片表 的產品可以有1-N視頻

id name   product_id  user_id rank 
--- ----   -----------  ------- ---- 
1  bike video1  1    100  1    
2  bike video2  1    100  2 
3  computer video  3    100  3 
4  notebook video  4    150  1 
5  scooter video  5    150  2 

因此,查詢讀取,在字: 對於每個預訂記錄,獲得了#1排列的產品排名第一的視頻爲預訂的用戶。通過預訂位置來訂購結果。

+0

你有什麼企圖這麼遠嗎? – 2010-12-02 06:48:27

+0

我太尷尬,顯示我可憐的嘗試。我真正難以接受的部分是僅獲得排名第一的產品排名第一的視頻。如果它是直接連接而不需要獲得1的排名,那將會容易得多。 – Paul 2010-12-02 06:53:38

回答

1
SELECT v.id, 
     v.name, 
     v.rank, 
     v.user_id, 
     u.name AS uname 
FROM videos v 
     JOIN users u 
     ON u.id = v.user_id 
     JOIN bookings b 
     ON u.id = b.user_id 
WHERE v.product_id = (SELECT id 
         FROM products 
         WHERE user_id = b.user_id 
         ORDER BY rank ASC 
         LIMIT 1) 
ORDER BY b.position ASC, v.rank ASC 

一些簡單的查詢:

SELECT v.id, 
     v.name, 
     v.user_id, 
     u.name AS uname, 
     p.name AS pname 
FROM videos v 
     JOIN users u 
     ON u.id = v.user_id 
     JOIN bookings b 
     ON u.id = b.user_id 
     JOIN products p 
     ON p.id = v.product_id 
WHERE v.product_id = (SELECT id 
         FROM products 
         WHERE user_id = b.user_id 
           AND rank = 1) 
     AND v.rank = 1 
ORDER BY b.position ASC