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

Форум MySQL

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

 

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

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

тема: Сортировка таблицы

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

 
 автор: SaIdEr   (20.04.2013 в 22:54)   письмо автору
 
   для: 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', 'СОХРАНЕН');

Этого кода нет во всем интернете и все гадают как можно сделать сортировку, но пусть типерь пользуются :)

  Ответить  
 
 автор: Sfinks   (20.04.2013 в 16:37)   письмо автору
 
   для: SaIdEr   (19.04.2013 в 23:14)
 

Как можно о программировании говорить без кода?

Да, и сортируются не столбики, а строчечки.

  Ответить  
 
 автор: 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 стераются

  Ответить  
 
 автор: Sfinks   (17.04.2013 в 10:03)   письмо автору
 
   для: SaIdEr   (16.04.2013 в 15:57)
 

> если удалить допустим 2, 3 то сортировка перестает работать

Что значит перестает работать?

Перестает работать сортировка или сохранение сортировки?

Думаю сохранение. Потому что при выводе цифры 6,4,1,5 в любом случае будут отсортированы как 1,4,5,6

А если сохранение, то какой из вариантов: мой или ваш?

Думаю ваш, т.к. если мерить котлован изнутри, ошибки не избежать.
Поэтому я и говорил, что нужно pos менять в соответствии с id, а не наоборот.

  Ответить  
 
 автор: SaIdEr   (16.04.2013 в 15:57)   письмо автору
 
   для: Sfinks   (13.04.2013 в 09:14)
 

Еще один вопрос столбик pos идет как 1,2,3,4,5,6 ... но если удалить допустим 2, 3 то сортировка перестает работать, как это исправить?

  Ответить  
 
 автор: Sfinks   (13.04.2013 в 09:14)   письмо автору
 
   для: SaIdEr   (12.04.2013 в 20:50)
 

Конечно можно!

А еще вместо того, чтобы вырыть котлован экскаватором можно нагнать 100500 гасторбайтеров, которые будут рыть лопатами в 100 раз дольше, в 50 раз дороже да еще и криво. А так конечно можно.

Вы идете по второму пути.

А то, что вы вместо того чтоб по первичному ключу обновить позицию, обновляете 3 поля в том числе и первичный ключ по позиции - это все равно что вместо того чтоб разметить землю и по разметке вырыть котлован, начать рыть и от центра ямы измерять размеры.

  Ответить  
 
 автор: SaIdEr   (12.04.2013 в 20:50)   письмо автору
 
   для: 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', 'СОХРАНЕН');

  Ответить  
 
 автор: Sfinks   (12.04.2013 в 16:57)   письмо автору
 
   для: 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 в 14:09)   письмо автору
 
   для: 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

  Ответить  
 
 автор: saider   (12.04.2013 в 09:03)   письмо автору
 
   для: Sfinks   (12.04.2013 в 08:10)
 

Вот таким запросом я уже решил проблему, но код покажу по позже, может быть какие предложения будут по улучшению кода

  Ответить  

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

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

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