|
|
|
|
|
для: 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]);
}
?>
|
| |
|
|
|
|
|
|
|
для: 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; | |
|
|
|
|
|
|
|
для: Trianon
(03.03.2006 в 13:23)
| | Так я тоже могу :)
только в этом comparer всё и заключается.
Как туда передать исходный массив $arr и как проводить сравнение... Всё равно трёхэтажно получится | |
|
|
|
|
|
|
|
для: Axxil
(03.03.2006 в 13:11)
| | while(($row=mysql_fetch_array($res)) != 0)
rows[] = $row;
usort(rows, comparer); | |
|
|
|
|
|
|
|
для: Trianon
(03.03.2006 в 13:14)
| | Теперь у меня уже спортивный интерес появился. Просто так не сдамся :) | |
|
|
|
|
|
|
|
для: Axxil
(03.03.2006 в 12:57)
| | Книжку наверное можно тут найти http://dev.mysql.com/doc/refman/4.0/ru/index.html
Да только стоит подумать, может и вправду таблицу постоянной сделать? | |
|
|
|
|
|
|
|
для: 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.
Можно конечно нагородить циклов, но не хочется... | |
|
|
|
|
|
|
|
для: Axxil
(03.03.2006 в 12:57)
| | вероятность процентов 80 что у вашего хостера временные таблицы запрещены. Насколько мне известно, это вообще большая редкость: неграмотным кодом можно запросто положить сервер. | |
|
|
|
|
|
|
|
для: Trianon
(03.03.2006 в 12:54)
| | > Но меня от этого тошнит. А Вас?
Есть такое дело...
Раньше я везде такую конструкцию ваял, пока про in мне не рассказали :)
О, а вроде и temporary table тоже можно на лету создавать... А как?
Блин, дома книжка, где всё это отлично разжёвано, только вечером доберусь... | |
|
|
|
|
|
|
|
для: 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-средствами отсортировать.... Хотя это и не пафосно, согласен. | |
|
|
|
|