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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: MySQL: перестановка элементов в таблице
 
 автор: mabelrod   (14.04.2011 в 12:22)   письмо автору
 
 

Есть таблица - в ней есть поле SORT числовое, данные из таблицы выводятся как ORDER BY SORT.

На странице есть 2 кнопки "выше" и "ниже" то бишь операции над меню - менять местами текущий элемент и ( либо вышестоящий или нижестоящий, зависит от кнопки что нажали повысить или понизить )

Каким образом это сделать ?

  Ответить  
 
 автор: cheops   (14.04.2011 в 12:26)   письмо автору
 
   для: mabelrod   (14.04.2011 в 12:22)
 

Первичный ключ у таблицы есть?

  Ответить  
 
 автор: mabelrod   (15.04.2011 в 00:48)   письмо автору
 
   для: cheops   (14.04.2011 в 12:26)
 

да - ID то есть допустим есть всего 3 поля:

ID, SORT, CONTENT

  Ответить  
 
 автор: cheops   (15.04.2011 в 01:17)   письмо автору
 
   для: mabelrod   (15.04.2011 в 00:48)
 

Возможно вам пригодятся следующие две функции
<?php
  
// Подъём блока на одну позицию вверх
  
function up($id_position$tbl_name)
  {
    
// Извлекаем текущую позицию
    
$query "SELECT SORT FROM $tbl_name
              WHERE ID = 
$id_position
              LIMIT 1"
;
    
$pos mysql_query($query);
    if(!
$pos) exit("Ошибка - ".mysql_error());
    if(
mysql_num_rows($pos))
    {
      
$pos_current mysql_result($pos0);
    }
    
// Извлекаем предыдую позицию
    
$query "SELECT pos FROM $tbl_name
              WHERE SORT < 
$pos_current
              ORDER BY SORT DESC
              LIMIT 1"
;
    
$pos mysql_query($query);
    if(!
$pos) exit("Ошибка - ".mysql_error());
    if(
mysql_num_rows($pos))
    {
      
$pos_preview mysql_result($pos0);
  
      
// Меняем местами текущую и предыдущую позиции
      
$query "UPDATE $tbl_name
                SET SORT = 
$pos_current + $pos_preview - pos
                WHERE SORT IN (
$pos_current$pos_preview)";
      
mysql_query($query);
    }
  }

  
// Опускание блока на одну позицию вниз
  
function down($id_position$tbl_name)
  {
    
// Извлекаем текущую позицию
    
$query "SELECT SORT FROM $tbl_name
              WHERE ID = 
$id_position
              LIMIT 1"
;
    
$pos mysql_query($query);
    if(!
$pos) exit("Ошибка - ".mysql_error());
    if(
mysql_num_rows($pos))
    {
      
$pos_current mysql_result($pos0);
    }
    
// Извлекаем следующую позицию
    
$query "SELECT SORT FROM $tbl_name
              WHERE SORT > 
$pos_current
              ORDER BY SORT
              LIMIT 1"
;
    
$pos mysql_query($query);
    if(!
$pos) exit("Ошибка - ".mysql_error());
    if(
mysql_num_rows($pos))
    {
      
$pos_next mysql_result($pos0);
  
      
// Меняем местами текущую и следующую позиции
      
$query "UPDATE $tbl_name
                SET SORT = 
$pos_next + $pos_current - pos
                WHERE SORT IN (
$pos_next$pos_current)";
      
mysql_query($query);
    }
  }
?>
Первая функция поднимает позицию на единицу, а вторая - опускает. Первый параметр - первичный ключ изменяемой позиции, второй параметр - название таблицы.

  Ответить  
Rambler's Top100
вверх

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