2010-12-02 67 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