-
есть поле name типа varchar с данными: 1, 2, 10, 1-р, 21, 3-е, ...нужно "правильно" отсортировать данные по этому полю, тоесть: 1, 1-р, 2, 3-е, 10, 21, ...order by name<code/> возвращает: 1, 10, 1-р, 2, 21, 3-е, ...
раньше я обходил эту проблему с использованием UDF - создавал допольнительное поле SORTNAME COMPUTED BY (mysort(name))<code/>, где функция mysort возвращала преобразованое поле, например
1-р -> 0001-р,
10 -> 0010,
...
какие будут решения, чтоб не использовать UDF?
-
Я обычно практически в любой таблице, где нужна сортировка, добавляю integer-поле Ord, в котором либо пользователь сам может нужный порядок проставить (чем меньше значение, тем "выше" запись будет во всех выборках), либо я сам могу этим делом управлять.
Правда не знаю, насколько в твоей ситуации этот вариант поможет...
-
а нету в Firebird функций разделения строк. Можно бы было разделить тогда на числовую и текстовую часть?
-
Появилась идея! В базе хранить 2 значения: номер (числовое) и приставку(текстовую). Логику реализовать на клиенте. Когда пользователь вводит или редактирует значение - разделять стринг на две части (левая числовая, а правая - текст) и записывать в базу 2 поля
Как только начал просить помощи, сразу идеи полезли )))
-
> а нету в Firebird функций разделения строк.
Что и этого нет?
-
Ну и что ты будешь делать, если будет Ф1Б, правильный совет тебе дали в [1], где отсутствуют коллизии подобного и прочих родов.
-
> Anatoly Podgoretsky © (18.04.08 12:46) [4] > > а нету в Firebird функций разделения строк.Что и этого > нет?
Есть :) не всё так плохо для любителей затыкать горой кода огрехи проектирования...
-
> Johnmen (18.04.2008 13:15:06) [6]
В следудующий раз получит от пользователей Вчера было 1-а/1-р, а сегодня 1-р/1-а
-
> Anatoly Podgoretsky © (18.04.08 13:28) [7]
Я и говорю, что на проектирование своё надо смотреть :)) А уж потом на функции...
-
1. такого по ТЗ не может быть "Ф1Б" 2. я это огрехом проэктирования не считаю, так как это есть просто номер какого-то объекта. На 100 объектов 95 будут чисто номерные, а 5 номер + приставка
всем спасибо
-
> Johnmen (18.04.2008 13:40:08) [8]
Но видишь ему до лампочки, что мы говорим.
-
> Anatoly Podgoretsky © (18.04.08 14:36) [10]
Ну хорошо. Ваше решение. Как бы вы это решили. Это поле номер скважины. Сначала было integer, потом в ходе експлуатации "стали появлятся" разные 1-а, 2-р, 9Г. Сделал поле типа varchar. Для различных подразделений и т.д. у меня есть поле с кодом (не путать с первичным ключем), которое вносится вручную и по нему идет сортировка.
Здесь дело не сколько во мне, а в системе стандартов. Но ее никто не будет менять, написана лет 60 назад. Нужно адаптировать все к современным требованиям. Мы работаем со старыми документами. Бывает что в таблице в одной ячейке ручкой записано 2 значения через слеш. И как тут поступить? Переделываешь тогда структуру или записываешь в базу что-то среднее
так что, зря вы меня пинаете...
-
> zorik © (18.04.08 14:55) [11]
Я бы решил вот так [3] с той разницей, что в одном поле, как есть, а в другом - числовое представление того, что в первом. Об этом и Ega23 © (18.04.08 12:31) [1] сказал.
-
так и решаем, а кто будет "неправильное" название вводить будем бить по шапке )))
-
> Johnmen (18.04.2008 14:58:12) [12]
Я бы сделал единственную модификацию, во втором поле умноженое на 10 и при конфликте запрашивать пользователя указать правильный порядок. Только вот это было integer, потом в ходе експлуатации "стали появлятся" разные 1-а, 2-р, 9Г. ему уде сказали, что может появится и не Число-литера, что угодно новое, ну не верит он в законы Мерфи и Паркинсона, как не верил в первом случае. Второе поле позволит сгладить некоторые моменты, отсрочит их на некоторе время, пока не начнут бить, надо же подготовиться к побегу.
-
> Johnmen (18.04.2008 14:58:12) [12]
Я бы сделал единственную модификацию, во втором поле умноженое на 10 и при конфликте запрашивать пользователя указать правильный порядок. Только вот это было integer, потом в ходе експлуатации "стали появлятся" разные 1-а, 2-р, 9Г. ему уде сказали, что может появится и не Число-литера, что угодно новое, ну не верит он в законы Мерфи и Паркинсона, как не верил в первом случае. Второе поле позволит сгладить некоторые моменты, отсрочит их на некоторе время, пока не начнут бить, надо же подготовиться к побегу.
-
> Anatoly Podgoretsky © (18.04.08 15:16) [14]
Так я же предусмотрительно умолчал о том, как формируется числовое представление :) А оно может формироваться безотносительно типа исходного поля.
-
> Johnmen (18.04.2008 15:29:16) [16]
Естественно пользователь может назначить свое значение как при вводе, так и в последующем. Эта "проблема" стара как мир и давно решена методом обхода, а не решением по существу, эта же проблема существует только в мозгах.
-
эта же проблема существует только в мозгах
ладно, спасибо вам! "хорошего" же вы ( мнения обо мне )))
-
В данном [17] контексте слово "мозги" носит собирательный характер... :)
|