|
|
|
| Вопрос к корифеям, мне необходимо хранить в БД диапазон значений, пример
от 8 до 12
от 12,5 до 14,3
Тоесть два числа, первое из которых определяет минимальное значение, второе максимальное. Для этого есть только одно текстовое поле (понимаю что не лучший вариант, но зажат в жесткие рамки). Плюс по полю нужно проводить поиск на предмет "попадания", в указанный диапазон, между минимальным и максимальным значением.
Как это дело лучше заносить в БД, чтобы было удобнее всего искать?
Благодарен за любые советы! | |
|
|
|
|
|
|
|
для: Tamplier
(08.02.2013 в 12:14)
| | это что за рамки такие? зачем ходить с рогаткой на медведя?
два поля int и никаких проблем с попаданием в диапазон | |
|
|
|
|
|
|
|
для: Valick
(08.02.2013 в 12:50)
| | Вы не поняли до конца, есть совершенно четкие условия в которые нужно вписаться, главное из них это то что значение должно хранится в 1 текстовом поле. Собственно по этому и озадачило, если бы была возможность выбора типа поля и их количество, вопрос не стоял бы... Если есть решения грамотные в рамках данного условия, подскажите. | |
|
|
|
|
|
|
|
для: Tamplier
(08.02.2013 в 14:00)
| | просто никак не могу понять чем обусловлены эти жесткие условия
это что тестовое задание? Или туголобость заказчика?
___
мое мнение, грамотных решений нет
храните значения через запятую | |
|
|
|
|
|
|
|
для: Valick
(08.02.2013 в 14:08)
| | Да я думал над разными формами, пример:
12.3,18
12.3-18
12.3(18)
Вот думаю как это организовать так, чтобы поиск легче реализовывать.
Там не туполобость, а просто определенные рамки сайта. | |
|
|
|
|
|
|
|
для: Tamplier
(08.02.2013 в 14:00)
| | А есть возможность проверить значения на клиенте до вставки в БД?
Если есть, то так и не понятно в чем проблема.
Если нет, то единственный (известный мне) способ - написать триггер BEFORE INSERT, в нем проверять диапазон, дальше по необходимости, либо изменять значение на предельно допустимое, либо генерировать ошибку. | |
|
|
|
|
|
|
|
для: Sfinks
(08.02.2013 в 14:25)
| | речь не о вставке, а о проверке попадания в диапазон указанный в этом поле | |
|
|
|
|
|
|
|
для: Valick
(08.02.2013 в 14:37)
| | Совершенно верно, проверки могу поставить любые. Вопрос в том в какой форме это дело хранить и как оптимальнее организовать поиск по данному полю. | |
|
|
|
|
|
|
|
для: Sfinks
(08.02.2013 в 14:25)
| | >Если есть, то так и не понятно в чем проблема.
Проблема и вопрос в том. в каком виде оптимальнее хранить данные и как осуществлять потом поиск по такому полю. К примеру в поле значение от 5 до 12, как оптимальнее искать попадание в диапазон? | |
|
|
|
|
|
|
|
для: Tamplier
(08.02.2013 в 14:54)
| | ... | |
|
|
|
|
|
|
|
для: Tamplier
(08.02.2013 в 12:14)
| | не знаю о какой оптимальности может идти речь, учитывая обозначенные рамки. индекс видимо тут никакой не построишь и все равно придется полный перебор при поиске делать. как-то так (если разделитель: '-'):
SELECT *
FROM t
WHERE 13.23 BETWEEN
SUBSTRING_INDEX(t, '-',1) AND SUBSTRING_INDEX(t, '-',-1)
|
| |
|
|
|
|
|
|
|
для: Igorek
(08.02.2013 в 15:27)
| | только не 't' а 'p'
SUBSTRING_INDEX(`p`, '-',1) | |
|
|
|
|
|
|
|
для: Valick
(08.02.2013 в 16:16)
| | у меня было
CREATE TABLE `t` (
`t` VARCHAR(50) NULL DEFAULT NULL
)
|
так что все норм) | |
|
|
|
|
|
|
|
для: Igorek
(08.02.2013 в 16:44)
| | это подстава :) | |
|
|
|