[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сложная выборка
ApuktaChehov
Здравствуйте уважаемы мега-отцы sql.
Сейчас речь пойте о MySQL.

Мне нужно сделать сложную выборку. А я не знаю к чему подступится.

Есть база заказов. Их порядка 5000.

В ней есть поле "дата сдачи заказа". Формат даты там Unix.

Задача:
Нужно извлечь все записи из БД в следующем порядке по дате сдачи:

1) Просроченные
2) Сегодня
3) Завтра
4) Послезавтра
5) Еще дальше чем послезавтра(кол-во дней)
6) Сданные

Т.е. сначала должны отображаться все просроченные, после, те что нужно сдать сегодня, потом те что завтра и т.д. по списку выше.

Я вот, даже не знаю возможно ли это сделать одним запросом или нет.


Подскажите куда копать. Спасибо!



Спустя 3 минуты, 47 секунд (1.03.2011 - 12:32) Snus написал(а):
ApuktaChehov
Быстрее и правильнее будет делать отдельными запросами.

Спустя 7 минут, 4 секунды (1.03.2011 - 12:39) linker написал(а):
Можно.

Спустя 40 секунд (1.03.2011 - 12:40) ApuktaChehov написал(а):
linker - а направление укажите?

Спустя 4 минуты, 59 секунд (1.03.2011 - 12:45) linker написал(а):
Давай больше данных. Как ты определяешь сдан проект или нет?

Спустя 7 минут, 1 секунда (1.03.2011 - 12:52) ApuktaChehov написал(а):
В таблице есть поле status, которое может принимать значение "сдан".

Спустя 15 минут, 47 секунд (1.03.2011 - 13:08) ApuktaChehov написал(а):
Я, кажется уже сам допер как сделать. Сделал вложенными запросами с UNION.
Работает как надо. Но я все же хотел бы увидеть и другие решения, если они есть. Может мой вариант не самый оптимальный.

Спустя 53 минуты, 53 секунды (1.03.2011 - 14:02) ApuktaChehov написал(а):
Вот и косяк.

Не работает сортировка при использовании UNION sad.gif

Беда прямо.

Спустя 16 минут, 24 секунды (1.03.2011 - 14:18) ApuktaChehov написал(а):
Аха. Решил эту проблему: оказывается оператор LIMIT нужно было занести в каждый вложенный запрос. А я его применял ко всему результату.

Продолжаю работать...

Спустя 1 час, 9 минут, 8 секунд (1.03.2011 - 15:27) Diakon написал(а):
ApuktaChehov сложно вам помоч не имея представления о структуре вашей БД.
Скажите сколько таблиц в БД и какие названия поля
В простом варианте, если все данные находятся в одной таблице (однако если это так и у вас 5000 позиций то у вас, скорее всего, все это адцки тормозит) то запрос можно написать такого вида
SELECT * FROM `НАЗВАНИЕ ТАБЛИЦЫ` WHERE status="сдан" ORDER BY data
тут data - поле с датой, а status - поле со статусом
Так же делаете запросы для всех других статусов и запихиваете результаты выборки в соответствующие масивы

Спустя 13 минут, 41 секунда (1.03.2011 - 15:41) ApuktaChehov написал(а):
Diakon - не, ничего не тормозит все быстро.

Я уже решил проблему, спасибо всем откликнувшимся.


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.