2010-12-02 2 views
1

Могу ли я получить помощь в создании этого запроса, пожалуйста?Создание таблицы в SQL

Пользователи записывают видеоролики продукта для рекламы ОДНОГО видео продукта. В таблице бронирования указаны эти заказы. Пункты бронирования назначаются пользователю не продукту или видео. Видео с рейтингом # 1 для продукта с номером 1 с номером пользователя будет объявлено.

Заказ стол

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

Пользователи Таблица Пользователи могут иметь 1-н заказы

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

Продукты таблицы Пользователь может иметь 1-п продуктов

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-н видео

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 место видео на # 1-место продукта для зарегистрированного пользователя. Закажите результаты по позиции бронирования.

+0

Что вы пытались до сих пор? – 2010-12-02 06:48:27

+0

Я слишком смущен, чтобы показать свои жалкие попытки. Часть, на которой я на самом деле зациклен, получает только 1-разрядное видео для продукта с номером 1. Если бы это было прямое соединение без необходимости получать строку с рангом 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 
Смежные вопросы