1

Can anyone help me here please. Unless I'm missing the blindingly obvious, i'm total stumped.

How is this query returning that line, when I'm asking for everything less or equal to 6 in the price column, and every greater or equal to 500 in the minutes column.

  1. minutes is a varchar
  2. price is an int

price is an int

To put it briefly, what is going on here

CREATE TABLE `gg_Crates` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `price` int(11) NOT NULL,
 `minutes` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
 `sms` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
 `data` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
 `url` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `bb` int(5) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
4

4 回答 4

2

您得到该行是因为您正在比较字符串。"500" >= "60"是真的,因为 ASCII 字符顺序。

您必须在过滤数据时更改minutes列的类型或解析值。例如。

SELECT *, CONVERT(minutes,UNSIGNED INTEGER) AS minutes_int
...
WHERE
...
AND `minutes_int` >= 600
...

也可以尝试直接将字符串值与整数值进行比较,例如。

AND `minutes` >= 600

通过删除逗号,但如果可能的话,我建议您考虑更改列格式,因为将分钟表示为 avarchar(11)是不正确的,并且还会使您无缘无故地占用大量空间。

于 2013-05-17T23:54:47.563 回答
0

在 mysql 中,不应在查询中引用数字。看起来引用500导致mysql在和`分钟之间进行字符串比较"500",而不是数字比较。

去掉数字周围的引号,它会按预期工作。

于 2013-05-17T23:55:56.410 回答
0

您正在比较两个字符串并期待一个数字比较输出。换句话说,您想做500 >= 60但实际上运行"500" >= "60"了这意味着STRCMP("500", "60"),它没有相同的结果。

将您的列转换为整数,并使用数字进行比较。

WHERE CONVERT(minutes, UNSIGNED INTEGER) >= 500

于 2013-05-17T23:57:45.780 回答
-1

尝试( )在条件中使用括号。类似的问题也发生在我身上。AND有时,当不使用括号时,引擎不会捕获运算符。

于 2013-05-17T23:54:38.800 回答