Проблемы с выборкой дробных интервалов из поля с типом text (MySQL)

db_fields.un_name - автор, у тебя вообще неправильный запрос! сравнивается и там и сям с разными полями!

это похоже на следующее:
форма = круглый ИЛИ форма = квадратный - так еще выбирается
форма = круглый И форма = квадратный - не будет

То есть тут 1) логическая ошибка 2) надо учить SQL

Код:
cast( db_fieldsdata.val as DECIMAL(4,2) )
это жесть! избавляйтесь от "text_val (text) - русское написание значения", ставьте сразу text_val DECIMAL(4,2). "Cast" плох тем, что каждый раз происходят вычисления, индекс по этому полю не используется.
 
Последнее редактирование:
То есть тут 1) логическая ошибка 2) надо учить SQL
Ну вот эту логическую ошибку я и не могу понять.
Почему не может быть объекта по двум параметрам?
Например, футболка. Цвет = красный или черный, размер M или L.
Запрос же вроде как должен быть примерно такой: WHERE ( un_name = color AND val = regexp('red|black') ) AND ( un_name = sizeAND val = regexp('M|lL) )
Если тут ошибка, то как правильно, чтобы объекты фильтровались по суммированию фильтров, а не через "или"?
это жесть! избавляйтесь от "text_val (text) - русское написание значения", ставьте сразу text_val DECIMAL(4,2). "Cast" плох тем, что каждый раз происходят вычисления, индекс по этому полю не используется.
text_val - предполагается для вывода данных сразу без лишних запросов.
Как вариант, я думаю, можно сделать еще одно поле decimal. Или какой тип лучше для целых и дробных чисел?
 
SQL имеет дело с "плоской" структурой, другими словами, работает на уровне строк, а не "объемных" деревьев.

1 вариант:

Код:
+----+-------------------+--------------------+
| ID | название_признака | значение_признака  |
+----+-------------------+--------------------+
| 10 | форма             | круглый            |
+----+-------------------+--------------------+

Вот как из такой записи выбрать по условию "форма = круглый И цвет = красный"??? Где цвет-то?

Из такой записи можно:

2 вариант:

Код:
+----+---------------------+----------------------+------------------------+---------------------+
| ID | название_признака_1 | значение_признака_1  | название_признака_2    | значение_признака_2 |
+----+---------------------+----------------------+------------------------+---------------------+
| 10 | форма               | круглый              | цвет                   | красный             |
+----+---------------------+----------------------+------------------------+---------------------+

Т.е. надо делать уловие на выборку из 1 варианта, потом объединять результаты, искать (совершенно не то, что вы предложили),
или джойнить таблицу саму с собой (2 вариант).

И еще. Не видя схемы данных трудно что-то конкретное предлагать.
 
Решено:
Скрытое содержимое доступно для зарегистрированных пользователей!
 
Назад
Сверху