mysql查询输出不正确

时间:2010-12-19 11:05:12

标签: php sql mysql

我有一个简单数据的mysql表,如:

alt text

现在当我执行这个简单的查询时:

SELECT MAX(cashback) as MAX, MIN(cashback) as MIN FROM pearlcashback_retailers_category WHERE retailer_id='32' AND cashback NOT LIKE '%\%'

输出:

alt text

并且对于此查询:

SELECT MAX(cashback) as MAX, MIN(cashback) as MIN FROM pearlcashback_retailers_category WHERE retailer_id='32' AND cashback LIKE '%\%'

输出:

alt text

请帮助我......


表的sql&数据:

CREATE TABLE IF NOT EXISTS `pearlcashback_retailers_category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `retailer_id` int(11) NOT NULL,
  `category_id` int(11) NOT NULL,
  `cashback` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;


INSERT INTO `pearlcashback_retailers_category` (`id`, `retailer_id`, `category_id`, `cashback`) VALUES
(1, 32, 17, '46%'),
(2, 32, 14, '40'),
(11, 4, 15, '27%'),
(9, 32, 15, '5'),
(8, 32, 7, '44%'),
(14, 3, 13, '1');

4 个答案:

答案 0 :(得分:2)

您的返现列是VARCHAR,这是一种文本类型,因此min(),max()等都按字母顺序排序(这是正常的),因此“b”> “aaaa”,当然“5”> “100”。

使用正确的类型。

答案 1 :(得分:1)

您正在对VARCHAR列进行排序 - 现金返还, 字符串'5'大于字符串'40',换句话说,如果你在字典中排列'5'和'40','5'在'40'之后,因此结果MAX - '5'和MIN' 40',

在另一种情况下 - 如果你在字典中排列'46%'和'44%','46%'会比'44%'晚,因此MAX '46%'和MIN '44%'

答案 2 :(得分:0)

您的cashback字段不正确。数据应采用一种格式。如果您在此字段中存储,则不需要百分比符号%。这对您的查询和架构都有好处。抱歉我的英文。

答案 3 :(得分:0)

现金返还似乎是一个varchar列,对于这样的'40'< '5'是真的。 我不确定以下是否适用于mysql:

SELECT MAX(cashback) as MAX, MIN(cashback) as MIN 
FROM pearlcashback_retailers_category 
WHERE retailer_id='32' AND cashback NOT LIKE '%\%'
ORDER BY cast(cashback as integer)