Показать полную графическую версию : Выбор записей с сортировкой (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
Кроме как вручную все удалять, расставлять, а потом вставлять ничего не придумал.
benya
добавляем одно поле
sort_order int(11) NOT NUL DEFAULT 0
расставляем значения в нем (например делаем для этого небольшой скрипт, чтобы это можно было делать из интерфейса), а потом спокойно делаем при выборке ORDER BY sort_order
Vlad Drakula
21-06-2006, 16:49
дополню mar иногда может быть полезным выставить атрибут "авто увеличение" чтобы не заботиться о номере при добавлении записи.
mar,
Ок Предположим есть записи (text,sort_order):
Видеокарта 1
Телевизор 2
Компьютер 3
Нужно Телевизор поставить выше чем Видеокарта, как???
я же сказала, если записей больше 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
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
Vlad Drakula
это само собой, просто для этого надо понимать суть сортировки, а судя по прошлому вопросу, этого не было, потому и разжевала с UPDATE =)
mar,
Таким образом я хотел узнать что делать с дублрующимися значениями. Если обновлять все, то может быть и покатит....
benya
ну так задал бы вопрос напрямую - что, мол, делать c дублирующими значениями :)
Ответы
- вариант 1. ввод через интерфейс, в котором все, например, скриптом JavaScrip раскидываешь стрелочками, а потом через foreach обновляешь все списком
- вариант 2. пример Влада
- вариант 3. через интерфейс, но двигаешь по одной и меняешь за один раз только 2 значения (местами)
наверное еще что-нибудь можно попридумывать :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.