3

我的客户给了我一个电子商务项目来修复一些错误。早期的愚蠢开发人员在 products 表中给出了价格字段 VARCHAR 数据类型而不是非常明显的 INTEGER,因此下一组开发人员为了根据价格范围进行搜索工作使用CAST(PRICE AS DECIMAL)。现在,我是第三个从事此工作的人,并发现它这种 CAST AS DECIMAL 的东西并不奇怪只适用于 0-500 的价格范围,但适用于所有其他价格范围,如 500-1000、1000-2000 等等.

查询类似于:

到目前为止的查询是:

 SELECT * FROM tbl_product where status=1 and subcat_id='128' and
 price>'0' and price<='500' ORDER BY CAST(price AS DECIMAL(12,2)) ASC

这是以某种方式搜索价格为1000及以上的产品..请帮助..

4

1 回答 1

3

这里最好的选择是接受 VARCHAR 不是正确的数据类型。你的行动计划很简单。

  1. 添加新列 priceNew DECIMAL(12,2)
  2. 将数据从 price 迁移到 priceNew
  3. 确认 priceNew 中的数据正确后,删除 price 并将 priceNew 重命名为 price
  4. 删除所有 CAST(price AS DECIMAL) hackjobs 并开始将数字作为数字处理
  5. 更新任何 SELECT/UPDATE/INSERT 的价格以确保它处理正确的新数据类型

从长远来看,这将使您的头痛大大减少,并且将更加可靠/最佳。它还将允许 MySQL 正确地将其视为数字而不是字符串,因此基于该列选择范围的键/值将变得更加有效。

于 2013-04-19T13:11:08.033 回答