Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> union 2 таблиц с разной сортировкой 
V
    Опции темы
bankir
Дата 14.1.2010, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



Товарищи выручайте!
Есть задача:
нужно вывести каталог товаров из таблицы (name, price, price_spec) subcatalog и exist - не упоминаю в примере для простоты
price - обычная цена, price_spec - цена со скидкой, если цены со скидкой нет, то она равна 0
машинка | 500 | 0
трактор  | 300 | 100

в итоге на сайте выводит позицию "машинка" по цене 500, а "трактор" по (цена 300 зачеркнуто, а сверху красным 100)

Так вот, хотелось бы вывести все скидочные позиции в начале каталога отсортированными по цене, а потом обычные тоже отсортированные по цене. 
В теории понимаю, что необходимо сначала выбрать все скидочные и отсортировать, а потом объединить снизу обычные отсортированные.
Код

(
select * from items 
where (exist>0) and subcatalog='12' and (price_spec>0) ORDER BY price_spec asc
) 
UNION (
select * from items 
where (exist>0) and subcatalog='12' and (price_spec=0) ORDER BY price asc
) LIMIT 0, 8


Данный код сортирует только скидочные правильно, а обычные не сортирует.
name      | price | price_spec
Набор 1 | 2000 | 450 
Набор 2 | 1700 | 460 
Набор 3 | 250   | 0 
Набор 4 | 400   | 0 
Набор 5 | 400   | 0 
Набор 6 | 200   | 0 

У кого какие соображения по этому поводу? 
Не хотелось бы идти через временную таблицу, так как набор полей часто меняется в таблице (некоторые добавляются, потом могут поменяться местами и тд), а в коде надо жестко задавать тип и название полей таблицы (реально порядка 20 полей в таблице, здесь привел сокр вариант).
К тому же идет постраничный вывод на экран для чего и используется LIMIT n, m

Подскажите в каком направлении рыть. Может нельзя одновременно использовать сортировку и в 1 и во втором 2 select?

Это сообщение отредактировал(а) bankir - 14.1.2010, 16:17
PM Skype   Вверх
bankir
Дата 14.1.2010, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 10.8.2007

Репутация: нет
Всего: нет



все, решилось
Код

select * from
(
select * from items 
where (exist>0) and subcatalog='12' and (price_spec>0) ORDER BY price_spec asc
) as tbl1
UNION ALL
select *
from
(
select * from items 
where (exist>0) and subcatalog='12' and (price_spec=0) ORDER BY price asc
) as tbl2
LIMIT 0, 8

может кому пригодится
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0385 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.