私は以下のコードスニペットを使用して価格帯を検索しています。私が低高値で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);
データベースで価格がドルを表す場合、なぜ数値データ型ではなくvarcharを使用するのですか? – hexparrot
データベースの 'item_price'カラムの値は、コンマ区切り文字を含めて文字列としてフォーマットされた数字ですか?このタイプの書式設定は、通常、DBに格納する前ではなく、出力時に実行されます。 –
数値を明示的にキャストしなくても、実際には 'BETWEEN'と'> 'をvarcharカラムに使用できますか? – TLP