Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сортировка данных

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Соц Сеть
Отправлено: 17 Ноября, 2013 - 12:56:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 307
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Здравствуйте ! например в базе есть 100 юзеров, нам надо взять id последних 10 юзеров, вот запрос $a=mysql_query("SELECT `id` FROM `users` ORDER BY `id` DESC LIMIT 10");
while($b=mysql_fetch_row($a)){
echo $b[0];
}

скрипт вернет
100,99,98,97,96,95,94,93,92,91

а мне надо чтобы echo вернул такой ответ
91,92,93,94,95,96,97,98,99,100
но sql запросу не надо трогать

как можно получить такой ответ ?
 
 Top
teddy
Отправлено: 17 Ноября, 2013 - 13:01:20
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Соц Сеть
уберите ключевое слово DESC
 
 Top
Соц Сеть
Отправлено: 17 Ноября, 2013 - 13:09:42
Post Id



Посетитель


Покинул форум
Сообщений всего: 307
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




teddy пишет:
Соц Сеть
уберите ключевое слово DESC

нет запросу трогать нельзя, задача такой, надо с массивом манипулировать

(Отредактировано автором: 17 Ноября, 2013 - 13:10:34)

 
 Top
teddy
Отправлено: 17 Ноября, 2013 - 13:12:31
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Соц Сеть
тогда прогоните массив через функцию array_reverse()
 
 Top
Соц Сеть
Отправлено: 17 Ноября, 2013 - 13:41:37
Post Id



Посетитель


Покинул форум
Сообщений всего: 307
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




teddy пишет:
Соц Сеть
тогда прогоните массив через функцию array_reverse()

array_reverse не может работать в этом примере так как каждый id один массив
 
 Top
Deonis
Отправлено: 17 Ноября, 2013 - 13:54:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




Вам принципиально делать на уровне SQL-запроса? Тогда так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. SELECT `ids`.* FROM  (
  2.     SELECT `id` FROM `users` ORDER BY `id` DESC LIMIT 10
  3. ) `ids` ORDER BY `ids`.`id` ASC
 
 Top
teddy
Отправлено: 17 Ноября, 2013 - 14:13:20
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Тогда так:
PHP:
скопировать код в буфер обмена
  1. $output = array_reverse(array_map(function($value){
  2.     return $value['id'];
  3. },$arr));
  4. print_r($output);
  5.  

$arr - это ваш массив, который надо перевернуть

(Отредактировано автором: 17 Ноября, 2013 - 14:13:51)

 
 Top
Соц Сеть
Отправлено: 17 Ноября, 2013 - 14:22:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 307
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




ладно скажу такой пример, как в facebook или VK выводят последний 10 сообщение от внизу до вверх ?
 
 Top
teddy
Отправлено: 17 Ноября, 2013 - 14:25:07
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Deonis пишет:
Вам принципиально делать на уровне SQL-запроса

ему как раз нужно не на уровне SQL запроса

Соц Сеть пишет:
как в facebook или VK выводят последний 10 сообщение от внизу до вверх ?

не знаю, но вашу проблему решает ORDER BY id ASC/DESC в зависимости от того что нужно получить
если не на уровне запроса и массив многомерный - пример выше с array_map я уже написал
(Добавление)
замените mysql_fetch_row на mysql_fetch_assoc и пример с array_map используйте
 
 Top
Соц Сеть
Отправлено: 17 Ноября, 2013 - 15:01:58
Post Id



Посетитель


Покинул форум
Сообщений всего: 307
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Deonis пишет:
Вам принципиально делать на уровне SQL-запроса? Тогда так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. SELECT `ids`.* FROM  (
  2.     SELECT `id` FROM `users` ORDER BY `id` DESC LIMIT 10
  3. ) `ids` ORDER BY `ids`.`id` ASC

это именно то что мне нужно, только как оно работает можете объяснить ?
 
 Top
caballero
Отправлено: 17 Ноября, 2013 - 15:10:25
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
array_reverse не может работать в этом примере так как каждый id один массив

ну так положи данные в массив по человечесски
(Добавление)
Цитата:
это именно то что мне нужно, только как оно работает можете объяснить

внутренний запрос откусывает 10 штук а внещний сортирует


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Соц Сеть
Отправлено: 17 Ноября, 2013 - 15:15:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 307
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




всем спасибо за помощь ))
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB