Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Union тройная сортировка по одному полю / 9 сообщений из 9, страница 1 из 1
30.05.2014, 16:19:38
    #38657255
vip-y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Union тройная сортировка по одному полю
сложновато описать, но попробую
Первый Union выводит записи по условию
Второй Union все остальные записи

далее без примера не объясню:
+------------------------------------------+---------------------------------------+
| city--------------------------------------| obl_nam |
+------------------------------------------+---------------------------------------+
| Круглое-------------------------------| Могилевская область |
| Минский р-н пос Ждановичи--| Минская область |
| Краснополье-----------------------| Могилевская область |
| Петриков-----------------------------| Гомельская область |
| Минск, Первомайский-----------| Минск |
+-------------------------------------------------+---------------------------------------+

Код: sql
1.
2.
3.
4.
(SELECT 1,city.City, @ob:=`obl`.`Obl_nam` as obl FROM obl INNER JOIN city ON obl.id = city.idObl Where city = 'Круглое' limit 5)
UNION 
(SELECT 2,city.City, `obl`.`Obl_nam` as obl FROM obl INNER JOIN city ON obl.id = city.idObl Where city <> 'Круглое' limit 5)
ORDER BY 1


далее нужно по второму union отсортировать по obl_nam первого union, а все оставшееся по ob_nam asc
должно получиться:
+------------------------------------------+---------------------------------------+
| city--------------------------------------| obl_nam |
+------------------------------------------+---------------------------------------+
| Круглое-------------------------------| Могилевская область |
| Краснополье-----------------------| Могилевская область |
| Петриков-----------------------------| Гомельская область |
| Минский р-н пос Ждановичи--| Минская область |
| Минск, Первомайский-----------| Минск |
+-------------------------------------------------+---------------------------------------+

у самого куча идей, т.к. есть много способов и без union, но пока не могу додумать сортировку
может у кого получиться быстрее, буду благодарен за помощь
...
Рейтинг: 0 / 0
30.05.2014, 16:37:51
    #38657280
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Union тройная сортировка по одному полю
vip-y,

оба запроса выдадут идентичные наборы данных. Объясняйте дальше.
...
Рейтинг: 0 / 0
30.05.2014, 16:39:50
    #38657285
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Union тройная сортировка по одному полю
А, нет, там неравенство. Впрочем, всё равно непонятно, зачем в первом запросе переменные.
vip-yдалее нужно по второму union отсортировать по obl_nam первого union, а все оставшееся по ob_nam ascт.е. сначала должна идти запись первого юниона (она всегда одна, я так понимаю), потом записи второго с такой же областью, а потом всё остальное с какой-то ещё сортировкой, так?
...
Рейтинг: 0 / 0
30.05.2014, 16:56:43
    #38657306
vip-y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Union тройная сортировка по одному полю
tanglir,
переменную я добавлял, пробывал сортировку с переменной, так и осталась

авторт.е. сначала должна идти запись первого юниона (она всегда одна, я так понимаю) - да все верно
авторпотом записи второго с такой же областью - все записи второго!, но именно сортировка должна начинаться с такой же областью, как у первого
автора потом всё остальное с какой-то ещё сортировкой, так - да сортировка остального по алфавиту
...
Рейтинг: 0 / 0
30.05.2014, 17:05:49
    #38657318
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Union тройная сортировка по одному полю
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT
 city.City
 ,`obl`.`Obl_nam` as obl 
FROM obl 
JOIN city ON obl.id = city.idObl 
CROSS JOIN (
 SELECT `obl`.`Obl_nam` as obl 
 FROM obl JOIN city ON obl.id = city.idObl 
 Where city='Круглое'
) t0
ORDER BY (city='Круглое') desc, (obl.obl_nam=t0.obl) desc, obl.Obl_nam LIMIT 6
...
Рейтинг: 0 / 0
30.05.2014, 17:07:14
    #38657320
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Union тройная сортировка по одному полю
А вообще исходный запрос бредовый, т.к. во втором подзапросе у вас не задан порядок сортировки --> там могут оказаться любые 5 записей из таблицы (кроме попавшей в первый подзапрос)
...
Рейтинг: 0 / 0
30.05.2014, 17:11:59
    #38657323
vip-y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Union тройная сортировка по одному полю
tanglir,
это limit я для примера написал, чтобы таблицу сюда вставить
спасибо за запрос, сча попробую
...
Рейтинг: 0 / 0
30.05.2014, 18:00:31
    #38657375
vip-y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Union тройная сортировка по одному полю
авторtanglir,
я просто ни разу не использовал просто JOIN
для меня как-то все сложновато
это "декартовое" соединение? т.е. количество строк одной * на колво строк другой
если не сложно поясните какая последовательность здесь
сначала первый JOIN срабатывает и получаеться куча записей, а дальше по Inner со второй таблицей?

CROSS JOIN это тот же INNER JOIN?
...
Рейтинг: 0 / 0
30.05.2014, 18:10:56
    #38657381
vip-y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Union тройная сортировка по одному полю
я сделал так:
Код: sql
1.
2.
3.
4.
(SELECT 1,city.City, @ob:=`obl`.`Obl_nam` as obl FROM obl INNER JOIN city ON obl.id = city.idObl Where city = 'Круглое')
UNION 
(SELECT 2,city.City, `obl`.`Obl_nam` as obl FROM obl INNER JOIN city ON obl.id = city.idObl Where city <> 'Круглое')
ORDER BY 1,(obl=@ob) desc,obl


я до этого не верно подставлял переменную, вставлял просто ORDER BY @ob
вроде это так же работает
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Union тройная сортировка по одному полю / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]