Уменьшение на 1

Ermitazh

Новичок
Уменьшение на 1

Есть таблица

id prior
1 1
2 2 и т.д.

Проблема: если делаю DELETE то как правило стирается id и prior.
Можно как нибудь сделать так, чтобы после удаления prior во всех ячейках обновлялся на 1
меньше.
Например если стираю 2ой ряд то
id prior
1 1

3 3 - хотелось бы чтобы на этом месте prior был 2
И так во всех последующих записях.
Спасибо
 

zerkms

TDD infected
Команда форума
Ermitazh
думаю что тебе этого не должно хотеться, особенно касаемо id
 

que_bunt

Новичок
Ermitazh а зачем prior тебе постоянно обновлять приор?
zerkms id он вроде как раз не хотел изменять, только prior
 

Ermitazh

Новичок
да, только приор чтоб в очереди был...ид меня вообще не волнует

-~{}~ 08.05.06 14:53:

у меня хитрая система получилась...вообщеи сделал так что на странице заголовки новостей, могу им порядок менять как хочу (стрелки вверх и вниз). Вроде бы всё начало работать...но вот когда удаляю запись то порядок сбивается и вместо того чтобы двигаться новость стоит на месте. Одним словом приор нельзя разрывать...
 

zerkms

TDD infected
Команда форума
упс, был невнимателен....

UPDATE `tbl` SET `prior` = `prior` - 1 WHERE `id` > 2

ps: и всё равно - ты уверен что тебе это нужно?

-~{}~ 08.05.06 21:55:

Вроде бы всё начало работать...но вот когда удаляю запись то порядок сбивается и вместо того чтобы двигаться новость стоит на месте. Одним словом приор нельзя разрывать..
это с какой стати?
 

que_bunt

Новичок
смотри есть новости с приором:
1
2
3
4

например ты удаляеш номер 3 и получается:
1
2
4

что не сдвигается?
 

Ermitazh

Новичок
zerkms
Не сдвинется это значит что ячейка не обновится с последующим значением.
мне надо чтоб каждое значение ячейки на 1 уменьшалось...
если ид приор
1 2 то если удаляю то последующее ид должно присвоить себе этот приор.
 

Andreika

"PHP for nubies" reader
Ermitazh
ответ тебе дали..он тя не устраивает? он не работает? выдает какую-то ошибку?

вопрос - зачем нужен этот самый prior ?
 

Ermitazh

Новичок
ответ посмотрел...попробовал...так
UPDATE `tbl` SET `prior` = `prior` - 1 WHERE `id` > 2
результат -1 всех полей которые расположены за ид=2

-~{}~ 08.05.06 16:20:

mysql_query("UPDATE service_".$lang." SET prior='".($prior-1)."' WHERE `id` > '2'");
 

que_bunt

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

Andreika

"PHP for nubies" reader
Ermitazh
1. от того, что после prior=2 идет prior=4 порядок на странице изменится?
3. mysql_query("UPDATE service_".$lang." SET prior='".($prior-1)."' WHERE `id` > '2'");
кто тебе посоветовал сделать именно так?
 

[Gisma]

Новичок
Убиться об стену:)

-~{}~ 08.05.06 15:34:

Сохраняешь значение prior удаляемого ряда в $x
и бахаешь запрос
mysql_query("UPDATE service_".$lang." SET prior='".($prior-1)."' WHERE `prior`> '$x'");
 

Ermitazh

Новичок
zerkms

UPDATE `tbl` SET `prior` = `prior` - 1 WHERE `id` > 2
посоветовал

Andreika
Порядок не изменится а просто станет невозможно передвигать информацию или вверх или вниз
передвижение идёт так... $prior+1 если вверх и $prior-1 если вниз
Дело в том что выбирается сначала последующая или предыдущая записи, потом прибавляется или вычитается и в зависимости от этого обновляется ид новости где имеется соответствующий приор

PHP:
if($_GET["alla"]){
    $cur_id=$_GET["alla"];
    $q=mysql_fetch_array(mysql_query("SELECT prior FROM service_".$lang." WHERE id='".$cur_id."'"));
    $cur_pr=$q[prior];
    $pr=$cur_pr+1;
    $q=mysql_fetch_array(mysql_query("SELECT id FROM service_".$lang." WHERE prior='".$pr."'"));
    $id=$q[id];
    mysql_query("UPDATE service_".$lang." SET prior='".$pr."' WHERE id='".$cur_id."'");
    mysql_query("UPDATE service_".$lang." SET prior='".$cur_pr."' WHERE id='".$id."'");
  }
    if($_GET["ylesse"]){
    $cur_id=$_GET["ylesse"];
    $q=mysql_fetch_array(mysql_query("SELECT prior FROM service_".$lang." WHERE id='".$cur_id."'"));
    $cur_pr=$q[prior];
    $pr=$cur_pr-1;
    $q=mysql_fetch_array(mysql_query("SELECT id FROM service_".$lang." WHERE prior='".$pr."'"));
    $id=$q[id];
    mysql_query("UPDATE service_".$lang." SET prior='".$pr."' WHERE id='".$cur_id."'");
    mysql_query("UPDATE service_".$lang." SET prior='".$cur_pr."' WHERE id='".$id."'");
  }
-~{}~ 08.05.06 16:36:

А вот и вывод:
PHP:
<?
          $m=mysql_query("SELECT * FROM service_".$lang." ORDER BY prior");
          while($mm=mysql_fetch_array($m)){
            // prior
            if(mysql_fetch_array(mysql_query("SELECT id FROM service_".$lang." WHERE prior='".($mm[prior]+1)."'")))
              $alla=1;
            else $alla=0;            
            if(mysql_fetch_array(mysql_query("SELECT id FROM service_".$lang." WHERE prior='".($mm[prior]-1)."'")))
              $ylesse=1;
            else $ylesse=0;
        ?>
        <tr>
          <td><?if($alla==1){?><a href="?alla=<?=$mm[id]?>"><img src="img/alla.gif" border="0"></a><?}if($ylesse==1){?><a href="?ylesse=<?=$mm[id]?>"><img src="img/ylesse.gif" border="0"></a><?}?></td>
          <td width="90%">
            <?=$mm["name_".$lang]?>
          </td>
          <td>
            <a href="?del=<?=$mm[id]?>"><img src="img/kustuta.gif" border="0"></a>
 

Andreika

"PHP for nubies" reader
кокой ужс... повесицца

почитай внимательно что он тебе посоветовал, посмотри внимательно что ты написал, найди различия
 

Yo!

Новичок
0_o
Имхо проще
PHP:
if($_GET["alla"]){ 
     $pr=$cur_pr+1; 
     }
if($_GET["ylesse"]){ 
     $pr=$cur_pr-1; 
     }
....
 
Сверху