Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте!
Мне нужно вывести список прог по всем платформам из трёх таблиц, на которые подписан пользователь и сортировать по дате обновления с лимитом 10.
Есть таблицы с программами по платформам `s_Progs_win`, `s_Progs_mac`, `s_Progs_lin`, в которых все поля одинаковые:
id порядковый номер проги в таб. mediumint
id_soft id проги smallint
cat категория tinyint
date дата обновления datetime
name название varchar
Есть таблица с пользовательскими подписками на софт `s_subs`
id порядковый номер в таблице mediumint
user_id кто подписан mediumint
soft_id id проги (порядковый номер проги в таб.прог) smallint
platform платформа (win соответствует таблице `s_Progs_win`, mac - `s_Progs_mac`, lin - `s_Progs_lin`) char(3)
Реально такой запрос составить? Или тут без php не обойтись?
Неактивен
Реально. Идея такая:
SELECT * FROM `s_Progs_win` t1 JOIN `s_subs` ss1 ON t1.id = ss1.soft_id WHERE user_id=ID_НУЖНОГО_ПОЛЬЗОВАТЕЛЯ
UNION
SELECT * FROM `s_Progs_mac` t1 JOIN `s_subs` ss2 ON t1.id = ss2.soft_id WHERE user_id=ID_НУЖНОГО_ПОЛЬЗОВАТЕЛЯ
UNION
SELECT * FROM `s_Progs_lin` t1 JOIN `s_subs` ss3 ON t1.id = ss3.soft_id WHERE user_id=ID_НУЖНОГО_ПОЛЬЗОВАТЕЛЯ
Ну а эту выборку уже можно обернуть в отдельный selectm и в нем сортировать и ставить лимиты.
А лучше имхо view создать, почитайте http://webew.ru/articles/1832.webew
Неактивен
deadka написал:
Реально. Идея такая:
SELECT * FROM `s_Progs_win` t1 JOIN `s_subs` ss1 ON t1.id = ss1.soft_id WHERE user_id=ID_НУЖНОГО_ПОЛЬЗОВАТЕЛЯ
UNION
SELECT * FROM `s_Progs_mac` t1 JOIN `s_subs` ss2 ON t1.id = ss2.soft_id WHERE user_id=ID_НУЖНОГО_ПОЛЬЗОВАТЕЛЯ
UNION
SELECT * FROM `s_Progs_lin` t1 JOIN `s_subs` ss3 ON t1.id = ss3.soft_id WHERE user_id=ID_НУЖНОГО_ПОЛЬЗОВАТЕЛЯ
Ну а эту выборку уже можно обернуть в отдельный selectm и в нем сортировать и ставить лимиты.
А лучше имхо view создать, почитайте http://webew.ru/articles/1832.webew
Спасибо большое! Сделал в итоге так:
SELECT * from ( SELECT id_soft, cat, date, name FROM `s_Progs_win` t1
JOIN `s_subs` ss1 ON t1.id = ss1.soft_id
WHERE user_id =ID_ПОЛЬЗОВАТЕЛЯ
AND platform = 'win'
UNION
SELECT id_soft, cat, date, name FROM `s_Progs_mac` t1
JOIN `s_subs` ss2 ON t1.id = ss2.soft_id
WHERE user_id =ID_ПОЛЬЗОВАТЕЛЯ
AND platform = 'mac'
UNION
SELECT id_soft, cat, date, name FROM `s_Progs_lin` t1
JOIN `s_subs` ss3 ON t1.id = ss3.soft_id
WHERE user_id =ID_ПОЛЬЗОВАТЕЛЯ
AND platform = 'lin' ) ppp ORDER BY date DESC LIMIT 10
Отредактированно Евгений Андреевич (16.07.2015 14:25:51)
Неактивен