价格低和高搜索

时间:2012-02-15 20:38:39

标签: mysql perl search range

我正在使用下面的代码段来搜索价格范围。如果我搜索1-600美元的低价,结果包括22,500的价格。该列是varchar。感谢

if (($price_low) && ($price_high)){
$statement .= " OR item_price BETWEEN ? AND ? ";
push(@binds,$price_low,$price_high);
}
elsif (($price_low) && ($price_high eq "")){
$statement .= " OR item_price > ? ";
push(@binds,$price_low);
}
elsif (($price_high) && ($price_low eq "")){
$statement .= " OR item_price BETWEEN ? AND ? ";
push(@binds,1,$price_high);
}
else {  }
my $sth = $dbh->prepare(qq(SELECT * FROM ads WHERE $statement )) or  die $DBI::errstr;
$sth->execute(@binds);

1 个答案:

答案 0 :(得分:3)

你写道:

  

该列是varchar。

这个,以及列中的格式是这里的问题。对于你提到的那一行,你基本上是这样做的:

> SELECT '22,500' BETWEEN 1 AND 600;

MySQL将强制将字符串 '22,500'转换为数字值,在第一个逗号之后(包括)删除所有内容。因此,item_price '22,500'变为22,当然在1和600之间。(如果您在执行声明后显示警告会怎样?我想您会看到关于不正确DOUBLE的警告截断...)

将您的列转换为真正的数字类型,然后再次尝试查询。 (解决问题@CanSpice指出......)

相关问题