Обрезание

  • Автор темы Автор темы macros
  • Дата начала Дата начала

macros

Guest
Обрезание

Здравствуйте друзья!
Есть следуящая задача.
Оператор с помощью скрипта заполняет данными таблицу с помощью INSERT
одно из полей этой таблицы содержит четырехзначные числа от 1000 до 99999
Реально же анализироваться в работе будут только трехзначные числа т.е. от 100 до 999
можно ли как-то решить чтобы при вставке в таблицу автоматом обрезалась последняя ненужная цифра.
Если я назначаю столбец char(3) все прекрасно работает, а при INT(3) ставяться все четыре цифры.
Иметь строковой тип не хотелось бы потому как работать будет медленнее. Неужели переназначать тип столбца после вставки.
И еще, не вызывает ли такое обрезание (модное слово;) замедление работы скрипта при загрузке Это важно т. к. максимальный размер единовременно загружаемых данных мы определили с провайдером опытным путем.
 
macros:
раздели задачу на части.
и объясни подробно что ты делаешь.
только чуть более ясно - понятие "обрезание" в контексте баз данных обычно не употребляется.
 
Уважаемый, а что вы думаете под INT(3) наверное всетаки отвести 3 байта под число а точнее 256^3 :)
Не мучайся! выбери либо храни все это в CHAR(3) либо в INT(2) - два байта это не так уж много :)

У скажи какого характера тебе действия нужно выполнять над этим значением! :)
 
Уважаемые друзья, подробности следующие
Это книжный каталог, в поле о котором я вел речь классификатор, причем из четырехзначного числа реально для поиска по каталогу нужны только 3 первых цифры, а четвертая только мешает т.к. не несет никакого смысла никому кроме тонких знатоков библиотечного дела и не дает сделать жесткое сравнение WHERE 'classif' =379 например, заставлять оператора убирать эти цифры из базы до закачки ИМХО не очень порядочно т.к. записей много.
Действие с этим полем намечается только одно - поиск по нему.

С уважением
 
LIKE, ИМХО, не самый быстрый способ поиска.
Сейчас попробовал CHAR(3) , вроде режет. После этого назначаю INT и индексирую.
 
Если использовать конструкцию
WHERE LIKE "123%" то можешь создать индекс по первым 3 символам и он будет использоваться!

Но если запрос будет
WHERE LIKE "%123%" то индексы уже не будут использоваться!
 
а может попробовать это число разделить на 2 поля в базе -
3 и 1
 
Автор оригинала: mahoune
WHERE LIKE "123%" то можешь создать индекс по первым 3 символам и он будет использоваться!
Спасибо, так и придется наверное делать , а то я хотел и рыбку съесть и быстродействием не подавиться;)
 
>а четвертая только мешает т.к. не несет никакого смысла никому
>кроме тонких знатоков библиотечного дела
я бы предложил просто не обращать внимания на нее.
дело в том, что SMALLINT заводить в такой базе смысла нет имхо(да и исправлять данные при занесении нельзя, как я понял), а INT мешать никому не будет.
 
Задача, господа, следующая
есть таблица с полем CLASSIF
оно содержит четырехзначные числовые значения
например

1234
1232
1345
1320

Поисковому скрипту мы передаем трехзначное число например 123 (по другому нелья)
По этому запросу скрипт должен выдать значения
1234
1232
Посоветуйте пожалуйста, как сделать это лучше?
Какой тип поля сделать? Как проиндексировать?
Может действительно лучше искать в диапазоне
Т.е where CLASSIF>1230 and where CLASSIF<1240
 
Сверху