Обрезание

macros

Guest
Обрезание

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

tony2001

TeaM PHPClub
macros:
раздели задачу на части.
и объясни подробно что ты делаешь.
только чуть более ясно - понятие "обрезание" в контексте баз данных обычно не употребляется.
 

mahoune

Guest
Уважаемый, а что вы думаете под INT(3) наверное всетаки отвести 3 байта под число а точнее 256^3 :)
Не мучайся! выбери либо храни все это в CHAR(3) либо в INT(2) - два байта это не так уж много :)

У скажи какого характера тебе действия нужно выполнять над этим значением! :)
 

macros

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

С уважением
 

macros

Guest
LIKE, ИМХО, не самый быстрый способ поиска.
Сейчас попробовал CHAR(3) , вроде режет. После этого назначаю INT и индексирую.
 

mahoune

Guest
Если использовать конструкцию
WHERE LIKE "123%" то можешь создать индекс по первым 3 символам и он будет использоваться!

Но если запрос будет
WHERE LIKE "%123%" то индексы уже не будут использоваться!
 

Eddy

Guest
а может попробовать это число разделить на 2 поля в базе -
3 и 1
 

macros

Guest
Автор оригинала: mahoune
WHERE LIKE "123%" то можешь создать индекс по первым 3 символам и он будет использоваться!
Спасибо, так и придется наверное делать , а то я хотел и рыбку съесть и быстродействием не подавиться;)
 

tony2001

TeaM PHPClub
>а четвертая только мешает т.к. не несет никакого смысла никому
>кроме тонких знатоков библиотечного дела
я бы предложил просто не обращать внимания на нее.
дело в том, что SMALLINT заводить в такой базе смысла нет имхо(да и исправлять данные при занесении нельзя, как я понял), а INT мешать никому не будет.
 

macros

Guest
Задача, господа, следующая
есть таблица с полем CLASSIF
оно содержит четырехзначные числовые значения
например

1234
1232
1345
1320

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