Вопрос

У меня возникли проблемы со сравнением значений, найденных в полях VARCHAR.

У меня есть таблица с продуктами, и каждый продукт имеет объем.Я сохраняю том в поле VARCHAR, и обычно это число (30, 40, 200...), но есть продукты, которые имеют несколько томов, и их данные хранятся через точку с запятой, например 30;60;80.

Я знаю, что хранить несколько томов таким образом не рекомендуется, но мне приходится работать с этим как есть.

Я пытаюсь реализовать функцию поиска по объему продуктов.Я хочу также отображать продукты, объем которых больше или равен объему искомого.Это не проблема продуктов с одним томом, но проблема с продуктами с несколькими томами.

Возможно, пример прояснит ситуацию:Допустим, у меня есть продукт с этим полем объема:30;40;70;80.Если кто-то искал объем, скажем, 50, я хочу, чтобы этот продукт отображался.

Для этого я подумывал написать свою собственную функцию MySQL (раньше я этого никогда не делал), но, возможно, кто-то предложит другое решение.

Прошу прощения за мой плохой английский, но надеюсь, что я ясно изложил свой вопрос.

Спасибо.

Это было полезно?

Решение

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

SELECT *
FROM products
WHERE CAST(SUBSTRING_INDEX(volume, ';', -1) AS UNSIGNED) >= 50
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top