Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: вывод из базы в порядке "как задал"

Сообщения:  [1-10]    [11-20]  [21-21] 

 
 автор: Axxil   (03.03.2006 в 15:05)   письмо автору
 
   для: Axxil   (03.03.2006 в 10:00)
 

Не сработал usort, пришлось реализовать в цикле с использование дополнительного массива.

<?
    
while($r=mysql_fetch_assoc($query)){
      
$ret[$r['id']] = $r;
    }
    foreach(
$arr as $v){
      
array_push($ret1,$ret[$v]);
    }    
?>

   
 
 автор: Trianon   (03.03.2006 в 13:58)   письмо автору
 
   для: Axxil   (03.03.2006 в 13:41)
 

Придется сортир глобальным сделать. Противно, но для такого случая приемлемо.
function comparer($a, $b) { global $revarr; return $revarr[$a['id']] - $revarr[$b['id']]; }
....
global $revarr;
$revarr = array();foreach($arr as $k=> $v) $revarr [$v]=$k;

   
 
 автор: Axxil   (03.03.2006 в 13:41)   письмо автору
 
   для: Trianon   (03.03.2006 в 13:23)
 

Так я тоже могу :)
только в этом comparer всё и заключается.
Как туда передать исходный массив $arr и как проводить сравнение... Всё равно трёхэтажно получится

   
 
 автор: Trianon   (03.03.2006 в 13:23)   письмо автору
 
   для: Axxil   (03.03.2006 в 13:11)
 

while(($row=mysql_fetch_array($res)) != 0)
rows[] = $row;
usort(rows, comparer);

   
 
 автор: Axxil   (03.03.2006 в 13:18)   письмо автору
 
   для: Trianon   (03.03.2006 в 13:14)
 

Теперь у меня уже спортивный интерес появился. Просто так не сдамся :)

   
 
 автор: Trianon   (03.03.2006 в 13:14)   письмо автору
 
   для: Axxil   (03.03.2006 в 12:57)
 

Книжку наверное можно тут найти http://dev.mysql.com/doc/refman/4.0/ru/index.html
Да только стоит подумать, может и вправду таблицу постоянной сделать?

   
 
 автор: Axxil   (03.03.2006 в 13:11)   письмо автору
 
   для: Loki   (03.03.2006 в 13:03)
 

Хостер ручной :)

Но, согласен зачем мышей бомбами закидывать...
Хорошо объясню проблему полностью.
На входе имеем массив

$arr = array(32,43,45,43,1,2,4);

Этот массив классически закидывается в запрос:

<?
$str 
implode(",",$arr);
$str substr($str,0,strlen($str)-1);
$sql 'select * from table where field in ('.$str.') order by field';
?>

На выходе получаем обычную сортировку по полю.
ОК, я уже согласен на сортировку средствами PHP, но не вижу элегантного решения как вывод запроса отсортировать в порядке значений массива $arr.
Можно конечно нагородить циклов, но не хочется...

   
 
 автор: Loki   (03.03.2006 в 13:03)   письмо автору
 
   для: Axxil   (03.03.2006 в 12:57)
 

вероятность процентов 80 что у вашего хостера временные таблицы запрещены. Насколько мне известно, это вообще большая редкость: неграмотным кодом можно запросто положить сервер.

   
 
 автор: Axxil   (03.03.2006 в 12:57)   письмо автору
 
   для: Trianon   (03.03.2006 в 12:54)
 

> Но меня от этого тошнит. А Вас?
Есть такое дело...
Раньше я везде такую конструкцию ваял, пока про in мне не рассказали :)

О, а вроде и temporary table тоже можно на лету создавать... А как?
Блин, дома книжка, где всё это отлично разжёвано, только вечером доберусь...

   
 
 автор: Trianon   (03.03.2006 в 12:54)   письмо автору
 
   для: Axxil   (03.03.2006 в 12:38)
 

Так ужасно temporary table создать?
Можно и без нее, но код будет еще ужаснее.
что-то вроде

SELECT * 
FROM table
NATURAL JOIN (
            select 7 as id , 1 as ordr 
union 
            select 3 as id , 2 as ordr 
union 
            select 4 as id , 3 as ordr 
union 
            select 1 as id , 4 as ordr 
union 
            select 5 as id , 5 as ordr 
) AS ordtab 
order by ordr

Это работает, я проверил. Но меня от этого тошнит. А Вас?
Кстати, для десяти строк результат можно и PHP-средствами отсортировать.... Хотя это и не пафосно, согласен.

   

Сообщения:  [1-10]    [11-20]  [21-21] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования