SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.07.2015 09:51:55

Евгений Андреевич
Участник
Зарегистрирован: 18.12.2013
Сообщений: 10

Вывод из 4 таблиц

Здравствуйте!

Мне нужно вывести список прог по всем платформам из трёх таблиц, на которые подписан пользователь и сортировать по дате обновления с лимитом 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 не обойтись?

Неактивен

 

#2 16.07.2015 10:48:07

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Вывод из 4 таблиц

Реально. Идея такая:
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


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 16.07.2015 14:23:35

Евгений Андреевич
Участник
Зарегистрирован: 18.12.2013
Сообщений: 10

Re: Вывод из 4 таблиц

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)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson