【问题标题】:Comparing values from a string in a MySQL query在 MySQL 查询中比较字符串中的值
【发布时间】:2010-03-18 19:01:34
【问题描述】:

我在比较 VARCHAR 字段中的值时遇到了一些问题。

我有一个产品表,每个产品都有体积。我将卷存储在 VARCHAR 字段中,它通常是一个数字(30、40、200..),但有些产品具有多个卷,并且它们的数据以分号分隔,例如 30;60;80。

我知道不建议这样存储多个卷,但我必须像这样使用它。

我正在尝试为产品实现按量搜索功能。我还想显示体积大于或等于搜索量的产品。 这不是单卷产品的问题,而是多卷产品的问题。

也许举个例子会让事情更清楚:假设我有一个产品,它的体积字段是:30;40;70;80。 如果有人搜索一卷,比如说 50,我希望显示该产品。

为此,我正在考虑编写自己的自定义 MySQL 函数(我以前从未这样做过),但也许有人可以提供不同的解决方案。

我为我糟糕的英语道歉,但我希望我把我的问题说清楚了。

谢谢。

【问题讨论】:

  • 如果表非常大,这个查询的性能将会很糟糕,因为您将无法利用该字段上的任何索引。
  • 卷是否总是按从左到右的递增顺序存储?
  • JohnFx,我们将使用缓存,希望能提高性能。马克·拜尔斯,我不确定是否诚实,我明天必须与某人核实一下。

标签: mysql comparison multiple-value


【解决方案1】:

您只需要与最大值进行比较。卷是否总是按从左到右递增的顺序存储?如果是,则与最后一个分号后的值进行比较(如果存在)。您可以使用SUBSTRING_INDEX 选择最后一个值。

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

【讨论】:

  • 您的答案看起来可行,非常感谢。关于卷的顺序,我现在不确定,但我怀疑它们尊重升序。
  • >卷是否总是按从左到右的递增顺序存储?是的。
猜你喜欢
  • 2013-01-26
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多