MySQL Query似乎没有输出预期

时间:2013-05-17 23:49:07

标签: mysql

请有人帮我。除非我错过了令人眼花缭乱的明显,否则我总是难倒。

当我要求价格列中的所有内容小于或等于6,并且在分钟列中每个都大于或等于500时,此查询如何返回该行。

  1. 分钟是varchar
  2. 价格是一个int
  3. 价格是一个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 个答案:

答案 0 :(得分:2)

您正在获取该行,因为您正在比较字符串。 "500" >= "60"为真,因为ASCII字符顺序。

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

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

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

AND `minutes` >= 600

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

答案 1 :(得分:0)

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

删除数字周围的引号,它将按预期工作。

答案 2 :(得分:0)

您正在比较两个字符串并期望数字比较输出。换句话说,您想要500 >= 60,但实际上您运行"500" >= "60",这意味着STRCMP("500", "60"),其结果不同。

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

WHERE CONVERT(minutes, UNSIGNED INTEGER) >= 500

答案 3 :(得分:-1)

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