This Might Be Useful

Двигаем при выводе строчки в таблице друг относительно друга

Часто встречается ситуация, когда необходимо вручную устанавливать порядок вывода записей в некоем списке. То есть клиент должен иметь возможность двигать строчки вверх-вниз друг относительно друга. Некоторые "программисты" изобретают для этого сложнейшие велосипеды. На самом же деле сделать это очень просто. Просто создаем дополнительное поле `customorder`, которое по умолчанию равно `id` (в случае, усли `id` не auto_increment, можно его ставить в (MAX(`customorder`) + 1)). Затем используем вот такую простую функцию:

PHP:
  1. function move_line($id, $up) {
  2.   $rez = mysql_query('SELECT `customorder`
  3.       FROM `thetable`
  4.       WHERE `id` = '.intval($id));
  5.   list($o) = mysql_fetch_row($rez);
  6.   $rez = mysql_query('SELECT `id`, `customorder`
  7.       FROM `thetable`
  8.       WHERE `customorder` '.($up ? '<' : '>').' '.$o.'
  9.       ORDER BY `order` '.($up ? 'DESC' : 'ASC').'
  10.       LIMIT 1');
  11.   if (mysql_num_rows($rez) > 0) {
  12.     list($nid, $no) = mysql_fetch_row($rez);
  13.     mysql_query('UPDATE `content`
  14.       SET `customorder` = '.$no.'
  15.       WHERE `id` = '.$id);
  16.     mysql_query('UPDATE `content`
  17.       SET `customorder` = '.$o.'
  18.       WHERE `id` = '.$nid);
  19.   }
  20. } // move_line

И да, я знаю, что это можно сделать меньшим количеством запросов. Но так нагляднее :).

· Реализация аналога LIMIT из MySQL в MS SQL
· Как заставить JOIN в MySQL нормально использовать индексы и максимально ускорить выполнение запросов
· Установка своего лого в свойства системы
· Добавление папок в контекстное меню Send To
· Создание загрузочного USB

- Коментировать
- Trackback

Leave a Reply

code