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

  • Автор темы Автор темы Ermitazh
  • Дата начала Дата начала

Ermitazh

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

Есть таблица

id prior
1 1
2 2 и т.д.

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

3 3 - хотелось бы чтобы на этом месте prior был 2
И так во всех последующих записях.
Спасибо
 
Ermitazh
думаю что тебе этого не должно хотеться, особенно касаемо id
 
Ermitazh а зачем prior тебе постоянно обновлять приор?
zerkms id он вроде как раз не хотел изменять, только prior
 
да, только приор чтоб в очереди был...ид меня вообще не волнует

-~{}~ 08.05.06 14:53:

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

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

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

-~{}~ 08.05.06 21:55:

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

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

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

вопрос - зачем нужен этот самый prior ?
 
ответ посмотрел...попробовал...так
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'");
 
Ermitazh ты пойми, спрашывают тебя зачем он тебе нужен, ибо скорее всего у тебя просто неправельный алгоритм решения твоей задачи, поэтому возникают такие вот проблемы, возможно есть более ефективный способ сделать то что ты хочеш.
 
Ermitazh
1. от того, что после prior=2 идет prior=4 порядок на странице изменится?
3. mysql_query("UPDATE service_".$lang." SET prior='".($prior-1)."' WHERE `id` > '2'");
кто тебе посоветовал сделать именно так?
 
Убиться об стену:)

-~{}~ 08.05.06 15:34:

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

почитай внимательно что он тебе посоветовал, посмотри внимательно что ты написал, найди различия
 
0_o
Имхо проще
PHP:
if($_GET["alla"]){ 
     $pr=$cur_pr+1; 
     }
if($_GET["ylesse"]){ 
     $pr=$cur_pr-1; 
     }
....
 
Сверху