[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрос с сортировкой по дате
AdminPRsam
Здравствуйте! В таблице с полями date, name, lastname, где дата имеет формат Y-MM-DD

Как правильна написать выборку что бы вывести в записи отсортированными от текущей даты но без учёта года. То есть по дням рождения от текущей.
Спасибо!




Спустя 12 минут, 15 секунд (21.10.2011 - 15:46) dadli написал(а):
а етот формат как виглядит в базе?

Спустя 7 минут, 35 секунд (21.10.2011 - 15:54) AdminPRsam написал(а):
2000-10-10

Спустя 4 минуты, 11 секунд (21.10.2011 - 15:58) Renden написал(а):
AdminPRsam

SELECT * FROM tbl ORDER BY MONTH(`date`) DESC, DAY(`date`) DESC

Спустя 1 минута, 1 секунда (21.10.2011 - 15:59) m4a1fox написал(а):
А ORDER BY DATE() не пойдет?

Спустя 5 минут, 30 секунд (21.10.2011 - 16:04) AdminPRsam написал(а):
Цитата (Renden @ 21.10.2011 - 12:58)
AdminPRsam
<pre class="sh_sourceCode" rel="sql">
<span class="sh_keyword">SELECT</span> <span class="sh_symbol">*</span> <span class="sh_keyword">FROM</span> tbl <span class="sh_keyword">ORDER BY</span> <span class="sh_function">MONTH(</span><span class="sh_att">`date`</span><span class="sh_symbol">)</span> <span class="sh_keyword">DESC</span><span class="sh_symbol">,</span> DAY<span class="sh_symbol">(</span><span class="sh_att">`date`</span><span class="sh_symbol">)</span> <span class="sh_keyword">DESC</span>
</pre>

Так не получаэтся:

$result = mysql_query("SELECT * FROM people ORDER BY MONTH(`date`) DESC, DAY(`date`) DESC",$db);

Результат:
1978-12-13
1984-11-28
1987-11-09
1975-10-29
1955-10-25
1984-10-22

2009-03-21
1983-03-20


А должно : начинатися с
1984-10-22
955-10-25

то есть если сегодня 2011-10-21 а дни рождения 10.20 и 10.22 то 22 должно быть первым а 20 в самом низу

Спустя 10 минут, 51 секунда (21.10.2011 - 16:15) m4a1fox написал(а):
AdminPRsam
Цитата
<pre class="sh_sourceCode" rel="sql">
<span class="sh_keyword">SELECT</span> <span class="sh_symbol">*</span> <span class="sh_keyword">FROM</span> tbl <span class="sh_keyword">ORDER BY</span> <span class="sh_function">MONTH(</span><span class="sh_att">`date`</span><span class="sh_symbol">)</span> <span class="sh_keyword">DESC</span><span class="sh_symbol">,</span> DAY<span class="sh_symbol">(</span><span class="sh_att">`date`</span><span class="sh_symbol">)</span> <span class="sh_keyword">DESC</span>
</pre>

Это у вас query получается? Однако!!!! Сеньор знает толк в извращении.......ИМХО конечно но весело! smile.gif

Спустя 1 минута, 6 секунд (21.10.2011 - 16:16) AdminPRsam написал(а):
я думал это довольно распространенная задача, и у нее должно быть простое решение. Но видимо нет.

Спустя 10 минут, 6 секунд (21.10.2011 - 16:26) m4a1fox написал(а):
Это элементарно, но только если правильно знаешь синтаксис mysql!

Спустя 3 минуты, 36 секунд (21.10.2011 - 16:30) killer8080 написал(а):
Цитата (AdminPRsam @ 21.10.2011 - 16:04)
то есть если сегодня 2011-10-21 а дни рождения 10.20 и 10.22 то 22 должно быть первым а 20 в самом низу

ну так убери сортировку по месяцу
SELECT * FROM `people` ORDER BY DAY(`date`) DESC

Спустя 4 минуты, 53 секунды (21.10.2011 - 16:35) AdminPRsam написал(а):
Цитата (killer8080 @ 21.10.2011 - 13:30)
Цитата (AdminPRsam @ 21.10.2011 - 16:04)
то есть если сегодня 2011-10-21 а дни рождения 10.20 и 10.22 то 22 должно быть первым а 20 в самом низу

ну так убери сортировку по месяцу
SELECT * FROM `people` ORDER BY DAY(`date`) DESC

Ну это понятно! Но тогда будет строить у кого число рождения больше тот и первый! А не от текущей даты!

Спустя 3 часа, 44 минуты, 20 секунд (21.10.2011 - 20:19) killer8080 написал(а):
AdminPRsam
так?
SELECT * 
FROM `tbl`
WHERE DAYOFYEAR(`date`)>=DAYOFYEAR(NOW())
ORDER BY DAY(`date`) DESC

Спустя 19 часов, 32 минуты, 9 секунд (22.10.2011 - 15:51) AdminPRsam написал(а):
Всем спасибо! Решил пока так: (может кому пригодиться).

SELECT *
FROM people
WHERE DATE_FORMAT(date, CONCAT(YEAR(NOW()),'-%m-%d')) BETWEEN DATE_SUB(NOW(), INTERVAL 1 DAY) AND DATE_ADD(NOW(), INTERVAL 365 DAY)
ORDER BY RIGHT(date,5)


Выбирает все даты от текущей на 356 дней. Потому ка мне, не нужно обрезать список, он должен выводиться полностью, но выводит только те которые будут в этом году. Следующий год не берёт.
Кто знает как дописать что бы вывело весть список буду благодарен!
Быстрый ответ:

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