Сравнение значений из строки в запросе MySQL - PullRequest
1 голос
/ 18 марта 2010

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

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

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

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

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

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

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

Спасибо.

1 Ответ

1 голос
/ 18 марта 2010

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

SELECT *
FROM products
WHERE CAST(SUBSTRING_INDEX(volume, ';', -1) AS UNSIGNED) >= 50
...