[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: LIMIT
Diablodag
Всем привет!
Объясните почему не получается сделать по двум параметрам сортировку

Нужно с календаря вытаскивал последние 5 сообщений

25,26,27,28,29
а выводит
29,28,27,26,25

mysql_query("SELECT * FROM date ORDER BY date DESC,id DESC LIMIT 5");




Спустя 1 минута, 31 секунда (17.02.2012 - 14:10) inpost написал(а):
Ну так у тебя всё правильно выводит.
Перечитай условие выборки какое.

Спустя 2 минуты, 42 секунды (17.02.2012 - 14:12) Diablodag написал(а):
чтот не получается так же выводит 29,28,27,26,25
а нужно 25,26,27,28,29

Спустя 3 минуты, 9 секунд (17.02.2012 - 14:15) wplounge написал(а):
Поставь ASC вместо DESC

Спустя 1 минута, 14 секунд (17.02.2012 - 14:17) inpost написал(а):
Опоздал... DESC - это и есть правило сортировки...
Почитай отличия между ASC и DESC

Спустя 1 минута, 45 секунд (17.02.2012 - 14:18) Diablodag написал(а):
ASC так он вообше выводит первые числа 1,2,3,4,5

Спустя 1 минута, 4 секунды (17.02.2012 - 14:19) ADiel написал(а):
Если ASC поставить, выберется 5 первых. Лично я не в курсе, а можно ли в LIMIT использовать SELECT? Например

LIMIT (SELECT COUNT(*))-5, 5

Надо будет почитать. Самому стало интересно.

Спустя 2 минуты, 6 секунд (17.02.2012 - 14:22) wplounge написал(а):
Значит надо указать офсет: LIMIT 25, 5

Спустя 5 секунд (17.02.2012 - 14:22) ADiel написал(а):
Можно не париться и вытащить первым запросом COUNT, а вторым - LIMIT ...

Спустя 1 минута, 6 секунд (17.02.2012 - 14:23) ADiel написал(а):
Цитата (wplounge @ 17.02.2012 - 11:22)
Значит надо указать офсет: LIMIT 25, 5

Ну 25 нужно откуда то взять сначала smile.gif
К тому же, 25 - это id, а не количество элементов.

Спустя 20 секунд (17.02.2012 - 14:23) Diablodag написал(а):
array_reverse как ее использовать?

Спустя 1 минута (17.02.2012 - 14:24) ADiel написал(а):
Цитата (Diablodag @ 17.02.2012 - 11:23)
array_reverse как ее использовать?

$arr = array(1,2,3,4);
$arr = array_reverse($array) // 4,3,2,1


Array
(
[0] => Array
(
[0] => green
[1] => red
)

[1] => 4
[2] => php
)
Array
(
[2] => Array
(
[0] => green
[1] => red
)

[1] => 4
[0] => php
)


Это из мануала

Спустя 26 секунд (17.02.2012 - 14:25) wplounge написал(а):
Сорри, лажу написал, еще толком не проснулся smile.gif LIMIT 24, 5.
Цитата
Ну 25 нужно откуда то взять сначала


Мы же не знаем что ему нужно конткретно.

Спустя 41 секунда (17.02.2012 - 14:25) Diablodag написал(а):
ORDER BY date LIMIT 25, 5 вообше не кактит(

Спустя 4 секунды (17.02.2012 - 14:25) inpost написал(а):
Выбрать 5 последних, а отсортировать их в обратном порядке?
$row = array();
$res = mysql_query("... DESC..."); // как у тебя и было
while($row[] = mysql_fetch_assoc());
$row = array_reverse($row);
foreach($row as $k=>$v)
{
наш вывод, аналогия с while() - вывод.
}

Спустя 5 минут, 50 секунд (17.02.2012 - 14:31) Placido написал(а):
Можно сделать ваш запрос подзапросом, а в основном запросе сортировать как угодно.
SELECT * FROM 
(SELECT * FROM `date` ORDER BY `date` DESC, `id` DESC LIMIT 5) AS `t`
ORDER BY `date` ASC, `id` ASC;


------

Можно и без ASC - такая сортировка включена по умолчанию.

Спустя 11 минут, 35 секунд (17.02.2012 - 14:43) inpost написал(а):
Placido
Хороший код, единственное что - нагружать лишний раз Мускул не хочется лишними подзапросами, ведь будет создаваться временная таблица. А сортировка будет не по индексам, что ещё медленнее раз в 50.

Спустя 5 минут, 7 секунд (17.02.2012 - 14:48) Placido написал(а):
Какая там нагрузка? Вторым запросом сортируются всего 5 записей.

Спустя 6 минут, 32 секунды (17.02.2012 - 14:54) inpost написал(а):
В виду создания временной таблицы для этих целей.

Спустя 5 минут, 37 секунд (17.02.2012 - 15:00) Diablodag написал(а):
Как использовать чтот не получается или эту нуна в MySQL писать
SELECT * FROM 
(SELECT * FROM `date` ORDER BY `date` DESC, `id` DESC LIMIT 5) AS `t`
ORDER BY `date` ASC, `id` ASC;

Спустя 1 минута, 22 секунды (17.02.2012 - 15:01) inpost написал(а):
Diablodag
Я тебе код выше дал готовый... Разберись с стандартными функциями, а не копи-пасти те запросы, который ты итак не поймешь.

Спустя 32 секунды (17.02.2012 - 15:02) Diablodag написал(а):
не функция не кактит

Спустя 42 секунды (17.02.2012 - 15:03) Diablodag написал(а):
Мне нужно что с масива прям отсоритрованя была

Спустя 1 минута, 47 секунд (17.02.2012 - 15:04) Placido написал(а):
Цитата (Diablodag @ 17.02.2012 - 14:00)
Как использовать чтот не получается или эту нуна в MySQL писать

Конечно же это нужно вставить в mysql_query() вместо вашего запроса;

... mysql_query("SELECT * FROM
(SELECT * FROM `date` ORDER BY `date` DESC, `id` DESC LIMIT 5) AS `t`
ORDER BY `date` ASC, `id` ASC"
)...

Спустя 29 секунд (17.02.2012 - 15:05) inpost написал(а):
Вот я тебе это и сделал выше, отсортировал так, как тебе надо.

Спустя 9 минут, 43 секунды (17.02.2012 - 15:15) Diablodag написал(а):
Placido Спасиб то что надо

inpost php мне и так тежело даются тоже учел

Спустя 3 минуты, 29 секунд (17.02.2012 - 15:18) Diablodag написал(а):
ADiel
array_reverse
Работает ну не подходит:(

Спустя 15 минут (17.02.2012 - 15:33) inpost написал(а):
Свернутый текст
Всё, беру себя в руки и тем, кто ничего в программировании не понимают - вообще не помогаю. Смысл тратить свои усилия, чтобы потом слышать: "прости, но я ничего в PHP не смыслю и думать не хочу, вон выше не оптимизированный непонятный тормозной запрос дали, я его скопи-пастил, ведь на большее я не способен! И его я тоже не понимаю, я умею копи-пастить лишь..."

Спустя 26 минут, 22 секунды (17.02.2012 - 15:59) Placido написал(а):
Этот запрос работает с таблицей в 600 000 записей без индексов за 0,7 с, а с такой же таблицей, но с составным индексом, за 0,03 с.
Свернутый текст
Это к слову о "не оптимизированном непонятном тормозном запросе".

Спустя 17 минут, 35 секунд (17.02.2012 - 16:17) inpost написал(а):
Placido
Вчера один запрос был, тоже работал от 0.10 до 0.01, сайт временами тормозил сильно при больших нагрузках, решил переписать его на кеше, добился за день прирост до 0.0001-0.0003. Теперь вообще всё летает.

Я тебе плюс поставил за ответ выше, так как ты хорошо помог автору, ты не обижайся, просто твой запрос уж точно ТС не поймет, не тот у него уровень сейчас, чтобы разбираться. Жди копи-паста и всё, это меня печалит в моём сообщении, а ты - молодец!

Спустя 19 часов, 32 минуты, 43 секунды (18.02.2012 - 11:50) Diablodag написал(а):
а еше проше решение для себя нашел:)

mysql_query("SELECT * FROM date WHERE date > '25.".date('m').".".date('Y')."' ORDER BY date ")


а дальше кто как использовать:)
Быстрый ответ:

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