我可以获得一些帮助来创建此查询吗?
用户预订产品视频广告位以宣传一个产品视频。预订表记录了这些预订。预订点被分配给用户而不是产品或视频。 用户排名第一的产品排名第一的视频将是广告的视频。
预订表
id user_id position
---- ----- --------
1 100 1
2 150 2
用户表 用户可以预订1-n
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
所以,查询用文字读取: 对于每个预订记录,获取预订用户排名第一的产品排名第一的视频。通过预订位置订购结果。
答案 0 :(得分: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