Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Выбор записей с сортировкой (MySQL) (http://forum.oszone.net/showthread.php?t=67540)

benya 21-06-2006 16:05 453135

Выбор записей с сортировкой (MySQL)
 
Господа, имеется стандартная структура таблицы:
Код:

CREATE TABLE `ttt` (
  `id` int(4) NOT NULL auto_increment,
  `text` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

Мне нужно отсортировать записи в том порядке в котором я хочу. К примеру мне нужно переместить запись на одну (на какое-то количество записей) выше или ниже текущей позиции.
Код:

Категория1
Категория2
Категория3

А мне нужно сделать примерно так:
Код:

Категория1
Категория3
Категория2

Кроме как вручную все удалять, расставлять, а потом вставлять ничего не придумал.

mar 21-06-2006 16:45 453168

benya
добавляем одно поле
sort_order int(11) NOT NUL DEFAULT 0

расставляем значения в нем (например делаем для этого небольшой скрипт, чтобы это можно было делать из интерфейса), а потом спокойно делаем при выборке ORDER BY sort_order

Vlad Drakula 21-06-2006 16:49 453171

дополню mar иногда может быть полезным выставить атрибут "авто увеличение" чтобы не заботиться о номере при добавлении записи.

benya 21-06-2006 16:59 453184

mar,
Ок Предположим есть записи (text,sort_order):
Код:

Видеокарта 1
Телевизор 2
Компьютер 3

Нужно Телевизор поставить выше чем Видеокарта, как???

mar 21-06-2006 17:15 453193

я же сказала, если записей больше 3, то для этого лучше сделать спец интерфейс, а так руками:
UPDATE ttt SET sort_order = 1 WHERE text = 'Видеокарта';
UPDATE ttt SET sort_order = 2 WHERE text = 'Телевизор';
UPDATE ttt SET sort_order = 3 WHERE text = 'Компьютер';
только в интерфейсе я бы работала не с названиями, а с id и расставялла бы порядок сортировки каждый раз для всех систем сразу

Vlad Drakula 21-06-2006 17:31 453203

benya, mar
Цитата:

Нужно Телевизор поставить выше чем Видеокарта, как???
1) выставляем у 'Телевизор'.sort_order = 'Видеокарта'.sort_order - 0.5
2) запускаем скрипт пересортировки который выставляет всем элементам целые числа начиная с 1

или

'Телевизор'.sort_order = 'Видеокарта'.sort_order - ('Видеокарта'.sort_order - select '*'.sort_order where sort_order > 'Видеокарта'.sort_order) / 2

mar 21-06-2006 18:08 453225

Vlad Drakula
это само собой, просто для этого надо понимать суть сортировки, а судя по прошлому вопросу, этого не было, потому и разжевала с UPDATE =)

benya 21-06-2006 18:44 453248

mar,
Таким образом я хотел узнать что делать с дублрующимися значениями. Если обновлять все, то может быть и покатит....

mar 21-06-2006 21:09 453313

benya
ну так задал бы вопрос напрямую - что, мол, делать c дублирующими значениями :)
Ответы
- вариант 1. ввод через интерфейс, в котором все, например, скриптом JavaScrip раскидываешь стрелочками, а потом через foreach обновляешь все списком
- вариант 2. пример Влада
- вариант 3. через интерфейс, но двигаешь по одной и меняешь за один раз только 2 значения (местами)
наверное еще что-нибудь можно попридумывать :)


Время: 00:27.

Время: 00:27.
© OSzone.net 2001-