Сортировка, но ...

bovkun

Новичок
Сортировка, но ...

Народ, прошу помощи. Ситуация вроде не сложная, но в трех соснах я явно уже заблудиться успел ))

Нужно организовать вручную сортировку базы. Кадый раз выбор не предсказуем.

Вот пример. Есть база (MySQL):

Код:
 id | sort |  name  | status
----|------|--------|--------
 1  |      | ivanov |   N
 2  |      | petrov |   N 
 3  |      | johns  |   N  
 4  |      | franks |   N
Хозяин сайта выбирает какие записи будут видны и в какой поочередности. В результате скрипт получает из формы (благодяря JavaScript) переменную sort с выбранными страницами в необходимой поочередности.
Например ?sort=3,4,1, (с запятой в конце!).
Это значит, что записям где id = 3, 4 и 1 должно быть присвоенно значение в поле sort, 1, 2 и 3 соответственно + изменение по полю status, ну это для меня понятно. А вот с первой задачей проблема.... Как к каждой упомянутой таким образом записи присобачить значения для поля sort, учитывая то, что информацию получаем в таком виде, т.е. ?sort=3,4,1, ?

Так чтобы потом получить

Код:
 id | sort |  name  | status    
----|------|--------|--------   
 1  |  3   | ivanov |   Y       
 2  |      | petrov |   N  		
 3  |  1   | johns  |   Y       
 4  |  2   | franks |   Y
Ну или при SELECT ... WHERE status='Y' ORDER BY sort

Код:
 id | sort |  name  | status    
----|------|--------|--------   
 3  |  1   | johns  |   Y       
 4  |  2   | franks |   Y  
 1  |  3   | ivanov |   Y
ЗЫ Если бы ни этот JavaScript, думаю, я бы без особых проблем организовал отправку переменной в нужной форме, а так ... имею то, что имею.... :(

Сорри, если я слишком долго и "каряво" объяснял чего хочу ))

ПОМОГИТЕ, ПЛИZ!!!
 

RomikChef

Guest
а зачем тебе сортировать именно в mysql?
явно речь идет о небольшом количестве полей.
ну так и сортируй их не в mysql, а где хочешь - хоть в РНР, хоть вообще тем же яваскриптом.
 

bovkun

Новичок
В PHP и нужно. А с JavaScript я не дружу ((
Помогите плиз!........
 

RomikChef

Guest
ну так считывай из mysql все в массив, а потом пробегай по массиву, который получил из формы и выводи соответствующие записи в нужном порядке.
 

bovkun

Новичок
На счет uksort щас гляну.

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

?sort[]=3&sort[]=4&sort[]=1

а так что мне делать с такой (sort=3,4,1,) записью ???
 

bovkun

Новичок
Спасибо, наверное это оно. Щас попробую...

Там же нашел вариант почти как у меня:

------------------------------------

mrnasty at gmx dot net
17-Jan-2002 06:54

sometimes a problem may occur, if user add a separator char at the end:
"item1, item2, item3, item4,", so the last would be an empty array-item.

you can fix this with using

$string = trim($string,$separator);

additionally it would be useful to get rid of the spaces leading (or following) each item:

$string = trim($string,$separator);
$strarray = explode($separator,$string);

foreach ($strarray as $stritem)
$stritem = trim($stritem);
 

bovkun

Новичок
Ура, ура! ))

tony2001, спасибо!!!

:D :) :D :rolleyes: :cool:

PHP:
MYSQL_QUERY("UPDATE `users` SET users_status='N' , part_order='0' "); 

$order = trim($order,",");
$order_array = explode(",",$order);

$i = 1;
for ($a=0; $a < count($order_array); $a++)
{
$result = MYSQL_QUERY("SELECT * FROM `users` 
	WHERE 1  AND `id` = '$order_array[$a]' ");   
while($row = mysql_fetch_array($result)) 
	{ $row_id = $row['id'] ; };
MYSQL_QUERY("UPDATE users SET status='Y', order='$i' 
	WHERE id='$row_id' "); 
$i++;
}
 

bovkun

Новичок
Автор оригинала: RomikChef
жалкое подобие левой руки.
RomikChef, т.е. ???

Что тут не так? Ведь жалаемого резальтата я достиг 1:1 !...

Я не программер, а дизайнер, и с PHP практически работаю очень короткий промежуток времени. Вроде в умных книжках так рекомендуют делать. Подскажи, как лучше...

:confused:
 

RomikChef

Guest
ну, в общем, у тебя процентов 60 лишнего кода тут и самое главное, я не понял - эта сортировка один раз делается, или задается на будущее?
 

RomikChef

Guest
Вот, как это должно выглядеть.

PHP:
$order_array = explode(",",trim($order,",")); 

for ($a=0; $a < count($order_array); $a++) { 
  $id=$order_array[$a];
  MYSQL_QUERY("UPDATE users SET status='Y', order='$a' 
    WHERE id='$id'");  
}
А твоя конструкция
$result = MYSQL_QUERY("SELECT * FROM `users`
WHERE 1 AND `id` = '$order_array[$a]' ");
while($row = mysql_fetch_array($result))
{ $row_id = $row['id'] ; };
это просто верх логики :)
"Гена, давай я понесу чемоданы, а ты понесешь меня?"
Залезть в базу, чтобы достать из нее id по переданному ей id :)))
 
Сверху