Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как оптимально сохранить диапазон значений
 
 автор: Tamplier   (08.02.2013 в 12:14)   письмо автору
 
 

Вопрос к корифеям, мне необходимо хранить в БД диапазон значений, пример

от 8 до 12
от 12,5 до 14,3

Тоесть два числа, первое из которых определяет минимальное значение, второе максимальное. Для этого есть только одно текстовое поле (понимаю что не лучший вариант, но зажат в жесткие рамки). Плюс по полю нужно проводить поиск на предмет "попадания", в указанный диапазон, между минимальным и максимальным значением.

Как это дело лучше заносить в БД, чтобы было удобнее всего искать?
Благодарен за любые советы!

  Ответить  
 
 автор: Valick   (08.02.2013 в 12:50)   письмо автору
 
   для: Tamplier   (08.02.2013 в 12:14)
 

это что за рамки такие? зачем ходить с рогаткой на медведя?
два поля int и никаких проблем с попаданием в диапазон

  Ответить  
 
 автор: Tamplier   (08.02.2013 в 14:00)   письмо автору
 
   для: Valick   (08.02.2013 в 12:50)
 

Вы не поняли до конца, есть совершенно четкие условия в которые нужно вписаться, главное из них это то что значение должно хранится в 1 текстовом поле. Собственно по этому и озадачило, если бы была возможность выбора типа поля и их количество, вопрос не стоял бы... Если есть решения грамотные в рамках данного условия, подскажите.

  Ответить  
 
 автор: Valick   (08.02.2013 в 14:08)   письмо автору
 
   для: Tamplier   (08.02.2013 в 14:00)
 

просто никак не могу понять чем обусловлены эти жесткие условия
это что тестовое задание? Или туголобость заказчика?
___
мое мнение, грамотных решений нет
храните значения через запятую

  Ответить  
 
 автор: Tamplier   (08.02.2013 в 14:49)   письмо автору
 
   для: Valick   (08.02.2013 в 14:08)
 

Да я думал над разными формами, пример:

12.3,18
12.3-18
12.3(18)

Вот думаю как это организовать так, чтобы поиск легче реализовывать.
Там не туполобость, а просто определенные рамки сайта.

  Ответить  
 
 автор: Sfinks   (08.02.2013 в 14:25)   письмо автору
 
   для: Tamplier   (08.02.2013 в 14:00)
 

А есть возможность проверить значения на клиенте до вставки в БД?
Если есть, то так и не понятно в чем проблема.
Если нет, то единственный (известный мне) способ - написать триггер BEFORE INSERT, в нем проверять диапазон, дальше по необходимости, либо изменять значение на предельно допустимое, либо генерировать ошибку.

  Ответить  
 
 автор: Valick   (08.02.2013 в 14:37)   письмо автору
 
   для: Sfinks   (08.02.2013 в 14:25)
 

речь не о вставке, а о проверке попадания в диапазон указанный в этом поле

  Ответить  
 
 автор: Tamplier   (08.02.2013 в 14:42)   письмо автору
 
   для: Valick   (08.02.2013 в 14:37)
 

Совершенно верно, проверки могу поставить любые. Вопрос в том в какой форме это дело хранить и как оптимальнее организовать поиск по данному полю.

  Ответить  
 
 автор: Tamplier   (08.02.2013 в 14:54)   письмо автору
 
   для: Sfinks   (08.02.2013 в 14:25)
 

>Если есть, то так и не понятно в чем проблема.

Проблема и вопрос в том. в каком виде оптимальнее хранить данные и как осуществлять потом поиск по такому полю. К примеру в поле значение от 5 до 12, как оптимальнее искать попадание в диапазон?

  Ответить  
 
 автор: Lotanaen   (08.02.2013 в 15:11)   письмо автору
 
   для: Tamplier   (08.02.2013 в 14:54)
 

...

  Ответить  
 
 автор: Igorek   (08.02.2013 в 15:27)   письмо автору
 
   для: Tamplier   (08.02.2013 в 12:14)
 

не знаю о какой оптимальности может идти речь, учитывая обозначенные рамки. индекс видимо тут никакой не построишь и все равно придется полный перебор при поиске делать. как-то так (если разделитель: '-'):
SELECT *
FROM t
WHERE 13.23 BETWEEN
SUBSTRING_INDEX(t, '-',1) AND SUBSTRING_INDEX(t, '-',-1)

  Ответить  
 
 автор: Valick   (08.02.2013 в 16:16)   письмо автору
 
   для: Igorek   (08.02.2013 в 15:27)
 

только не 't' а 'p'
SUBSTRING_INDEX(`p`, '-',1)

  Ответить  
 
 автор: Igorek   (08.02.2013 в 16:44)   письмо автору
 
   для: Valick   (08.02.2013 в 16:16)
 

у меня было
CREATE TABLE `t` (
    `t` VARCHAR(50) NULL DEFAULT NULL
)

так что все норм)

  Ответить  
 
 автор: Valick   (08.02.2013 в 17:28)   письмо автору
 
   для: Igorek   (08.02.2013 в 16:44)
 

это подстава :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования