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
Форумы портала PHP.SU :: Версия для печати :: Сортировка данных
Форумы портала PHP.SU » PHP » Программирование на PHP » Сортировка данных

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

1. Соц Сеть - 17 Ноября, 2013 - 12:56:38 - перейти к сообщению
Здравствуйте ! например в базе есть 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 запросу не надо трогать

как можно получить такой ответ ?
2. teddy - 17 Ноября, 2013 - 13:01:20 - перейти к сообщению
Соц Сеть
уберите ключевое слово DESC
3. Соц Сеть - 17 Ноября, 2013 - 13:09:42 - перейти к сообщению
teddy пишет:
Соц Сеть
уберите ключевое слово DESC

нет запросу трогать нельзя, задача такой, надо с массивом манипулировать
4. teddy - 17 Ноября, 2013 - 13:12:31 - перейти к сообщению
Соц Сеть
тогда прогоните массив через функцию array_reverse()
5. Соц Сеть - 17 Ноября, 2013 - 13:41:37 - перейти к сообщению
teddy пишет:
Соц Сеть
тогда прогоните массив через функцию array_reverse()

array_reverse не может работать в этом примере так как каждый id один массив
6. Deonis - 17 Ноября, 2013 - 13:54:45 - перейти к сообщению
Вам принципиально делать на уровне 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
7. teddy - 17 Ноября, 2013 - 14:13:20 - перейти к сообщению
Тогда так:
PHP:
скопировать код в буфер обмена
  1. $output = array_reverse(array_map(function($value){
  2.     return $value['id'];
  3. },$arr));
  4. print_r($output);
  5.  

$arr - это ваш массив, который надо перевернуть
8. Соц Сеть - 17 Ноября, 2013 - 14:22:20 - перейти к сообщению
ладно скажу такой пример, как в facebook или VK выводят последний 10 сообщение от внизу до вверх ?
9. teddy - 17 Ноября, 2013 - 14:25:07 - перейти к сообщению
Deonis пишет:
Вам принципиально делать на уровне SQL-запроса

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

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

не знаю, но вашу проблему решает ORDER BY id ASC/DESC в зависимости от того что нужно получить
если не на уровне запроса и массив многомерный - пример выше с array_map я уже написал
(Добавление)
замените mysql_fetch_row на mysql_fetch_assoc и пример с array_map используйте
10. Соц Сеть - 17 Ноября, 2013 - 15:01:58 - перейти к сообщению
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

это именно то что мне нужно, только как оно работает можете объяснить ?
11. caballero - 17 Ноября, 2013 - 15:10:25 - перейти к сообщению
Цитата:
array_reverse не может работать в этом примере так как каждый id один массив

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

внутренний запрос откусывает 10 штук а внещний сортирует
12. Соц Сеть - 17 Ноября, 2013 - 15:15:43 - перейти к сообщению
всем спасибо за помощь ))

 

Powered by ExBB FM 1.0 RC1