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]   

> Без описания
Sabonett
Отправлено: 10 Июня, 2013 - 14:34:37
Post Id


Новичок


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


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




Доброго времени!

Имеется переменная $sort которая содержит в себе многомерный массив с однородной структурой подмассивов:

PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.     [16] => Array
  4.         (
  5.             [0] => 1
  6.         )
  7.  
  8.     [12] => Array
  9.         (
  10.             [0] => 58
  11.         )
  12.  
  13.     [10] => Array
  14.         (
  15.             [0] => 44
  16.         )
  17.  
  18.     [14] => Array
  19.         (
  20.             [0] => 105
  21.         )
  22.  
  23.  
  24. )
  25.  


Для каждого подмассива в цикле выполняется запрос к mysql:


PHP:
скопировать код в буфер обмена
  1. foreach($sort as $v){
  2.  
  3. $sql="select * from ".$SysValue['base']['table_name20']." where id=$v";
  4. $result=mysql_query($sql);
  5. $SysValue['sql']['num']++;
  6. while ($row = mysql_fetch_assoc($result))
  7.     {
  8.         $id=$row['id'];
  9.         $num=$row['num'];
  10. }
  11. }
  12.  



результат вполне ожидаем:


PHP:
скопировать код в буфер обмена
  1. (
  2.     [id] => 16
  3.     [num] => 3
  4.  )
  5. (
  6.     [id] => 12
  7.     [num] => 1
  8.  )
  9. (
  10.     [id] => 10
  11.     [num] => 4
  12.  )
  13. (
  14.     [id] => 14
  15.     [num] => 2
  16.  )



Теперь вопрос: как отсортировать эти массивы по ключу [num] (1,2,3,4) ? И возможно ли это сделать средствами mysql? (order by num не работает, т.к. цикл и он перебирает все подмассивы).

Начальное количество подмассивов неизвестно.

Заранее спасибо за помощь!


Решение:

PHP:
скопировать код в буфер обмена
  1. $sql = 'SELECT * FROM '.$SysValue['base']['table_name20'].' where id IN ('.implode(', ', $sort).') ORDER BY num ASC';

(Отредактировано автором: 10 Июня, 2013 - 16:25:10)

 
 Top
esterio
Отправлено: 10 Июня, 2013 - 15:14:38
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




 
 Top
Sabonett
Отправлено: 10 Июня, 2013 - 15:20:15
Post Id


Новичок


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


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




esterio пишет:


(order by num не работает, т.к. цикл и он перебирает все подмассивы).
 
 Top
avtor.fox
Отправлено: 10 Июня, 2013 - 15:24:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




Sabonett, голубчик. Так если у Вас мильонъ записей, то получите мильонъ подзапросов. Зачем Вам такие опасности совершать для сфинктера?
 
 Top
Sabonett
Отправлено: 10 Июня, 2013 - 15:30:19
Post Id


Новичок


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


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




avtor.fox пишет:
Sabonett, голубчик. Так если у Вас мильонъ записей, то получите мильонъ подзапросов. Зачем Вам такие опасности совершать для сфинктера?


Записей около 10-15, просто их id берется из первого массива и на основании этих id делаются запросы в цикле, а поскольку запрос идет в цикле 'num' не работает Недовольство, огорчение
 
 Top
DeepVarvar Супермодератор
Отправлено: 10 Июня, 2013 - 15:36:23
Post Id



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


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


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





Sabonett пишет:
не работает
Нет слова "не могу", есть слово "не хочу". Подмигивание
 
 Top
avtor.fox
Отправлено: 10 Июня, 2013 - 15:37:09
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




Sabonett пишет:
Записей около 10-15

Это сейчас.

Вы лучше приведите структуру таблиц и что с чем нужно связать.
 
 Top
esterio
Отправлено: 10 Июня, 2013 - 15:55:29
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




PHP:
скопировать код в буфер обмена
  1. $sql = 'SELECT * FROM '.$SysValue['base']['table_name20'].' where id IN ('.implode(', ', $sort).') ORDER BY num ASC';

?
 
 Top
avtor.fox
Отправлено: 10 Июня, 2013 - 16:05:49
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




esterio пишет:
?

??
 
 Top
Sabonett
Отправлено: 10 Июня, 2013 - 16:21:32
Post Id


Новичок


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


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




esterio пишет:
PHP:
скопировать код в буфер обмена
  1. $sql = 'SELECT * FROM '.$SysValue['base']['table_name20'].' where id IN ('.implode(', ', $sort).') ORDER BY num ASC';

?


Вы гений! Все работает именно так, как нужно.
 
 Top
avtor.fox
Отправлено: 10 Июня, 2013 - 16:32:58
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




Sabonett, славно, если конечно не вырастет количество строк.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB