Перемещение данных

Dima85

Новичок
Код:
    $rowser = mysql_query("SELECT * FROM `man` WHERE MConf='man'");
      while ($str = mysql_fetch_assoc($rowser)){
              echo '<tr>';
              echo "<td>Строчка, Имя:" . $str['MName'] . "</td>";
              echo "</tr>";
      }
Вот так у меня выводятся данные. Возле каждой строчки я хочу сделать 2 кнопки "В верх" и "В низ". Нажав допустим на "В верх" запись переместиться выше. Подскажите как это реализовывают?

Первое что приходит в голову смотреть на численный якорь. И создавать запросы типа /?id=3&to=2
Далее PHP скрипт меняет ID 3 и ID 2 местами. Подскажите как сделать эту смену мест?
 

Breeze

goshogun
Команда форума
Партнер клуба
делаешь поле sort_order int, а далее
SELECT * FROM `man` WHERE MConf='man' ORDER BY sort_order

меняешь этот sort_order в нужном порядке
 

Dima85

Новичок
Я пошел по такому направлению:
4 помещаем в 1(это временная строка куда все записываем)
далее 3 помечаем в 4 и потом 1 помечаем в 3.

Но почему-то 1 не переименовывается в 3. Почему?

Код:
$tmove =4;
$to = 3;
$regiy = mysql_query("UPDATE `man` SET MID='$tmove' WHERE MID='1'");
$regiy = mysql_query("UPDATE `man` SET MID='$to' WHERE MID='$move'");
$regiy = mysql_query("UPDATE `man` SET MlD='1' WHERE MID='$to'");
 

Linker

Новичок
Dima85, не нужно торопиться писать код, лучше попробуйте вначале проанализировать все возможные варианты.
Поле MID у вас, это видимо поле для порядка сортировки?
В каких случаях этот "порядок" может меняться?

1. При добавлении записи в таблицу
2. При удалении записи из таблицы (в случае, если происходит реальное удаление записи а не UPDATE какого-то флага состояния записи)
3. При перемещении записи (точнее, изменение порядка, то о чём вы спрашиваете)

В первом случае, вам потребуется значение MAX(`MID`) к которому добавляется единица, для новой записи в таблицу.
Во втором случае, вам следует обновлять значение поля MID во всех записях, у которых порядок больше, чем в удаляемой записи:
UPDATE `man` SET MID = MID - 1 WHERE MID > '.$deleted_mid;
А вот в третьем случае, можно делать по разному. Например, можно заранее задавать направление перемещения записи, что-то типа "move_up" и "move_down" (ссылки для ваших кнопок "вверх" и "вниз" типа: ?move_up='.$id_man где $id_man - Primary key записи из таблицы man) но обязательно следует проверять, не выйдет ли новое значение за рамки диапазона вашего порядка. То есть, при "move_up" поле MID должно быть больше 1, а при "move_down" меньше чем MAX(`MID`). Если всё в порядке, обновляете две записи:

// если "move_up"
UPDATE `man` SET MID = '.$mid_man.' WHERE MID = '.$up;
UPDATE `man` SET MID = '.$up.' WHERE id_man = '.$id_man;

$mid_man значение поля MID у записи, которую перемещаем вверх,
$up - новое значение поля MID для записи, которую перемещаем вверх
$id_man - идентификатор записи, которую перемещаем вверх

// если "move_down"
UPDATE `man` SET MID = '.$mid_man.' WHERE MID = '.$down;
UPDATE `man` SET MID = '.$down.' WHERE id_man = '.$id_man;
$mid_man значение поля MID у записи, которую перемещаем вниз,
$down - новое значение поля MID для записи, которую перемещаем вниз
$id_man - идентификатор записи, которую перемещаем вниз
P.S. странные у вас названия полей в таблице...
 

Dima85

Новичок
MID это PRIMARY KEY, мне показалось не нужным создавать еще одну таблицу если есть возможно менять PRIMARY KEY
 

Linker

Новичок
Dima85, речь не о новой таблице, необходимо новое поле, как вам уже написали в первом ответе.
Я наверное, не совсем в тему употребил в своём сообщении термин PRIMARY KEY
в данном случае, даже не важно, является ли идентификатор записи которую вы меняете PRIMARY KEY или нет, просто, как правило, идентификатор это PRIMARY KEY только в этом смысле...
А вот для того, чтобы решить вашу задачу, вам потребуется и идентификатор, и поле для порядка сортировки, обязательно.
И совсем ничего не значит "возможность менять PRIMARY KEY", у вас есть возможность отформатировать винчестер или ударить молотком по монитору и никто не сможет вас отговорить, если возникнет такое желание.
 
Сверху