Задавайте вопросы, мы ответим
Вы не зашли.
Есть такой запрос
(SELECT * from orders WHERE active ='1' order by end_date ASC)
UNION DISTINCT
(SELECT * from orders WHERE active ='2' order by end_date DESC) LIMIT 0,7
Первая сортировка работает отлично, вторая "order by end_date DESC" отказывается работать, сортирует как "order by id ASC". В чём может быть проблема?
Неактивен
Тот факт, что "первая сортировка работает отлично" - случайное совпадение данных. Сортирвка каждой отдельной выборки без лимита не имеет смысла, так как UNION выдает результырующий неотсортировканный список.
http://dev.mysql.com/doc/refman/5.0/en/union.html
Неактивен
Лучше разделить эти запросы на 2 отдельных и жить счастливо
Неактивен
В том то и дело, что нужно сделать это одним запросом, неужели никак?
Неактивен
Можно, но вот только такое придумалось:
(привожу вместе с созданием таблицы, чтобы можно было убедиться, что работает)
Неактивен
rgbeast
Вся проблема в том, что ордер нужно делать по одной колонке(дата). Первую часть как ASC, вторую как DESC
Неактивен
UNION выводит результат в соответствии только с последним ордером, поэтому для сортировки используется дополнительное поле - пользовательская переменная @х, которую можно определить как угодно. В приведенном примере она определена через разные столбцы, в вашем случае её нужно будет определить через одну кколонку.
Пдробнее о пользовательских переменных см http://sqlinfo.ru/forum/viewtopic.php?id=363
To rgbeast
Все гениальное просто. Надо будет составить список примеров применения пользовательских переменных. Я вот, например, не сообразил использовать их в данной теме, что уж говорить о новичках, никогда о них не слышавших.
Кроме использования для различных сортировок вспоминается только возможность реализации курсора одним запросом.
Неактивен
Здравствуйте, подскажите, я немного не понял,
почему в
(select @x:=a x,ab.* from ab order by a)
вы поставили двоеточие и равно? у меня не работает с двоеточием, и почему после @x:=a идёт снова x ? Это представление?
почему в
(select @x:=b+1e9 x,ab.* from ab order by b)
у вас +1e9 ?? что такое 1e9, это число? Зачем???
У меня похожая задача
( SELECT a.*, b.PROPERTY_105, b.PROPERTY_64, b.PROPERTY_11200, b.PROPERTY_23200, b.PROPERTY_67900, b.PROPERTY_73, b.PROPERTY_106, b.PROPERTY_74, b.PROPERTY_130, a.PREVIEW_PICTURE, IF(b.PROPERTY_11200 > 0 or b.PROPERTY_23200 > 0 or b.PROPERTY_67900 > 0, 1, 2) sklad, b.PROPERTY_248, b.PROPERTY_247, @x = a.NAME, sklad x FROM `b_iblock_element` a LEFT JOIN `b_iblock_element_prop_s14` b ON a.ID = b.IBLOCK_ELEMENT_ID WHERE a.IBLOCK_ID = 14 and a.ACTIVE = "Y" AND ( a.NAME = "'.$_SESSION['key_word'].'" or b.PROPERTY_64 like "%'.$_SESSION['key_word'].'%" or a.ID = "'.$_SESSION['key_word'].'" ) ) UNION DISTINCT ( SELECT a.*, b.PROPERTY_105, b.PROPERTY_64, b.PROPERTY_11200, b.PROPERTY_23200, b.PROPERTY_67900, b.PROPERTY_73, b.PROPERTY_106, b.PROPERTY_74, b.PROPERTY_130, a.PREVIEW_PICTURE, IF(b.PROPERTY_11200 > 0 or b.PROPERTY_23200 > 0 or b.PROPERTY_67900 > 0, 1, 2) sklad, b.PROPERTY_248, b.PROPERTY_247, @x = a.NAME, sklad x FROM `b_iblock_element` a LEFT JOIN `b_iblock_element_prop_s14` b ON a.ID = b.IBLOCK_ELEMENT_ID WHERE a.IBLOCK_ID = 14 and a.ACTIVE = "Y" AND MATCH (a.NAME) AGAINST ("'.$_SESSION['key_word'].'") ) ORDER BY x
мне нужно назначить @x как sklad и a.NAME.
Вообще я использовал UNION так как надо сначало вывести точные совпадения a.ID товара b.PROPERTY_64 артикул, а потом уже полнотекстовый поиск MATCH AGAINST по названию.
Т.е. если пользователь не указал сортировку, то ему будет выводится вот в таком виде и можно не использовать переменные.
Но если пользователь захочет отсортировать, то данный вывод нужно отсортировать, это вообще реально?
Неактивен
SerMax написал:
Есть такой запрос
(SELECT * from orders WHERE active ='1' order by end_date ASC)
UNION DISTINCT
(SELECT * from orders WHERE active ='2' order by end_date DESC) LIMIT 0,7
Первая сортировка работает отлично, вторая "order by end_date DESC" отказывается работать, сортирует как "order by id ASC". В чём может быть проблема?
Отредактированно evgeny (05.06.2013 22:37:21)
Неактивен
rgbeast написал:
Можно, но вот только такое придумалось:
Очень благодарю за это решение. Ни на одном stack не нашел. Требовалось сортировать комментарии текущего пользователя иначе, чем все остальные.
Неактивен