|
|
|
|
|
для: Sfinks
(20.04.2013 в 16:37)
| | :), все, разобрался в чем дело, работаю уже в этой сфере 10 лет и такого элементарного не заметил
передает jquery плагин TebleDnD вот так в обработчик:
container_icon[]=0&container_icon[]=5&container_icon[]=6&container_icon[]=8
|
Что бы работала нормально сортировка код переделал так:
$data=$_POST['container_icon']; // получение массива id таблицы средством ajax
$json_sort = preg_replace('/\[*"(-?\d+\.?\d*)"\]*/', '$1', json_encode($data)); //убираем лишние символы
// выбираем столбцы, которые надо отредактировать согласно его pos
$result=db_query("SELECT * FROM grn_icons_shop WHERE id in ($json_sort)");
$pos=array();
while ($row = mysql_fetch_array($result)) {
$id_sort=$row['id'];
$array_name[$id_sort]=$row;
$pos[]=$row['pos'];
}
$a = array();
$f=-1;
foreach($data as $k => $v){
if($k>0){
$f+=1;
$a[] = "SELECT ".intval($pos[$f])." pos, ".intval($v)." id, '".$array_name[$v]['name_img']."' name_img,'".$array_name[$v]['name_shop']."' name_shop,'".$array_name[$v]['message']."' message";
}
}
$a = implode(' UNION ALL ', $a);
$sql = "UPDATE grn_icons_shop AS t1, (".$a.") t2
SET t1.id = t2.id,
t1.name_img = t2.name_img,
t1.name_shop = t2.name_shop,
t1.message = t2.message
WHERE t1.pos=t2.pos";
db_query($sql);
// выводим результат
$ok_text=iconv('cp1251', 'utf-8', 'СОХРАНЕН');
|
Этого кода нет во всем интернете и все гадают как можно сделать сортировку, но пусть типерь пользуются :) | |
|
|
|
|
|
|
|
для: SaIdEr
(19.04.2013 в 23:14)
| | Как можно о программировании говорить без кода?
Да, и сортируются не столбики, а строчечки. | |
|
|
|
|
|
|
|
для: Sfinks
(17.04.2013 в 10:03)
| | сортировка столбика id перестает работать, если в столбике pos сбить порядок 1,2,3,4,5 на порядок 1,3,4,5 то в столбике id сортировка перестает работать и все поля из id стераются | |
|
|
|
|
|
|
|
для: SaIdEr
(16.04.2013 в 15:57)
| | > если удалить допустим 2, 3 то сортировка перестает работать
Что значит перестает работать?
Перестает работать сортировка или сохранение сортировки?
Думаю сохранение. Потому что при выводе цифры 6,4,1,5 в любом случае будут отсортированы как 1,4,5,6
А если сохранение, то какой из вариантов: мой или ваш?
Думаю ваш, т.к. если мерить котлован изнутри, ошибки не избежать.
Поэтому я и говорил, что нужно pos менять в соответствии с id, а не наоборот. | |
|
|
|
|
|
|
|
для: Sfinks
(13.04.2013 в 09:14)
| | Еще один вопрос столбик pos идет как 1,2,3,4,5,6 ... но если удалить допустим 2, 3 то сортировка перестает работать, как это исправить? | |
|
|
|
|
|
|
|
для: SaIdEr
(12.04.2013 в 20:50)
| | Конечно можно!
А еще вместо того, чтобы вырыть котлован экскаватором можно нагнать 100500 гасторбайтеров, которые будут рыть лопатами в 100 раз дольше, в 50 раз дороже да еще и криво. А так конечно можно.
Вы идете по второму пути.
А то, что вы вместо того чтоб по первичному ключу обновить позицию, обновляете 3 поля в том числе и первичный ключ по позиции - это все равно что вместо того чтоб разметить землю и по разметке вырыть котлован, начать рыть и от центра ямы измерять размеры. | |
|
|
|
|
|
|
|
для: Sfinks
(12.04.2013 в 16:57)
| | Да, все вы поняли правильно, именно так и сортируется, только я вот ваш код немного изменил, так можно писать?
$data=$_POST['container_icon']; // получение массива id таблицы средством ajax
$json_sort = preg_replace('/\[*"(-?\d+\.?\d*)"\]*/', '$1', json_encode($data)); //убираем лишние символы
// выбираем столбцы, которые надо отредактировать согласно его id
$result=db_query("SELECT * FROM grn_icons_shop WHERE id in ($json_sort)");
while ($row = mysql_fetch_array($result)) {
$id_sort=$row['id'];
$array_name[$id_sort]=$row;
}
$a = array();
foreach($data as $k => $v){
$a[] = "SELECT ".intval($v)." id,
".intval($k)." pos,
'".$array_name[$v]['name_img']."' name_img,
'".$array_name[$v]['name_shop']."' name_shop";
}
$a = implode(' UNION ALL ',$a);
$sql = "UPDATE grn_icons_shop AS t1, (".$a.")t2
SET t1.id = t2.id,
t1.name_img = t2.name_img,
t1.name_shop = t2.name_shop
WHERE t1.pos = t2.pos";
db_query($sql);
// выводим результат
$ok_text=iconv('cp1251', 'utf-8', 'СОХРАНЕН');
|
| |
|
|
|
|
|
|
|
для: SaIdEr
(12.04.2013 в 14:09)
| | Ерунда какая-то.
Не нужно менять местами все поля таблицы.
И уж тем более не нужно делать этого в цикле.
(не нужно - следует читать как "категорически противопоказано").
Когда я просил показать код, я имел ввиду не код обработчика, а код JS, или еще лучше - данные, которые приходят в обработчик.
Для этого достаточно было в начале обработчика вставить: print_r($_POST);
Нет - значит буду объяснять так, как понятно мне.
Во-первых - как происходит сортировка? На сколько я понял - перетаскиванием.
Перетаскиванием чего? Допустим DIV'ов.
Следовательно - достаточно в каждый див вставить <input type=hidden name=id[] value=ид_строки>
Тогда при сериализации и отправке формы в обработчик придет массив id в нужном порядке и print_r($_POST) будет выглядеть так:
Array
(
[id] => Array
(
[0] => 757
[1] => 187
[2] => 366
)
)
|
Теперь в цикле (тут я сделаю сноску на то, что сразу не сообразил как сделать массовый UPDATE, но это все-таки возможно) формируем запрос:
<?php
$id = $_POST['id'];
$a = array();
foreach($id as $k => $v)
$a[] = "SELECT ".intval($v)." id, ".intval($k)." pos";
$a = implode(' UNION ALL ',$a);
$sql = "UPDATE grn_icons_shop AS t1
, (".$a.")t2
SET t1.pos = t2.pos
WHERE t1.id = t2.id";
?>
|
Полученный запрос будет иметь вид:
UPDATE grn_icons_shop AS t1
, (SELECT 757 id, 0 pos
UNION ALL
SELECT 187 id, 1 pos
UNION ALL
SELECT 366 id, 2 pos)t2
SET t1.pos = t2.pos
WHERE t1.id = t2.id
| и обновит сразу все строки. | |
|
|
|
|
|
|
|
для: saider
(12.04.2013 в 09:03)
| | Вот что у меня получилось, это весть код обработки таблицы на который происходит запрос на языке ajax
$data=$_POST['container_icon']; // получение массива id таблицы средством ajax
$json_sort = preg_replace('/\[*"(-?\d+\.?\d*)"\]*/', '$1', json_encode($data)); //убираем лишние символы
// выбираем столбцы, которые надо отредактировать согласно его id
$result=db_query("SELECT * FROM grn_icons_shop WHERE id in ($json_sort)");
while ($row = mysql_fetch_array($result)) {
$id_sort=$row['id'];
$row['name_shop']=iconv('cp1251', 'utf-8', $row['name_shop']);
$array_name[$id_sort]=$row;
}
// сортируем id а pos оставляем на месте
foreach( $data as $sort_order => $id ){
if($sort_order>0){
db_query("UPDATE grn_icons_shop SET id=$id,
name_img='".$array_name[$id]['name_img']."',
name_shop='".iconv('utf-8', 'cp1251', $array_name[$id]['name_shop'])."'
WHERE pos=$sort_order ORDER BY pos");
}
}
// выводим результат
$ok_text=iconv('cp1251', 'utf-8', 'СОХРАНЕН');
$arrayJson=array('ok' => $ok_text); // передаем назад на ajax
|
| |
|
|
|
|
|
|
|
для: Sfinks
(12.04.2013 в 08:10)
| | Вот таким запросом я уже решил проблему, но код покажу по позже, может быть какие предложения будут по улучшению кода | |
|
|
| |
|