Mysql查询,可同时过滤两种或多种货币的产品

Mysql查询,可同时过滤两种或多种货币的产品,mysql,sql,Mysql,Sql,我有两个名为products和Currency的表 CREATE TABLE `products` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `product_name` VARCHAR(15) DEFAULT NULL, `price` INT DEFAULT NULL, `price_currency` VARCHAR(5) DEFAULT NULL, PRIMARY KEY (`id`) ) CREATE TABLE `curr

我有两个名为products和Currency的表

CREATE TABLE `products` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `product_name` VARCHAR(15) DEFAULT NULL,
  `price` INT DEFAULT NULL,
  `price_currency` VARCHAR(5) DEFAULT NULL,
  PRIMARY KEY  (`id`)
)

CREATE TABLE `currencies` (
  `currency_name` VARCHAR(5) DEFAULT NULL,
  `buy_value` FLOAT DEFAULT NULL,
  `sell_value` FLOAT DEFAULT NULL,
  `modified` DATETIME DEFAULT NULL
)
我在产品表中有一些记录是美元价格,还有一些记录是欧元价格。我还有一个货币表,里面有美元、欧元等。买卖价值。当访问者输入美元价格以使用搜索表单筛选所有产品时,查询必须同时检查具有欧元价格值的产品


那么,我如何才能做到这一点呢?

我将更改货币表的结构。我不会有买卖价值,我会有

创建表货币 来源\u货币VARCHAR5不为空, 目的地货币VARCHAR5不为空, 值浮动不为空, 修改的日期时间默认值为空

并为用户想要相同货币的情况添加一组假记录,即插入欧元、欧元、1、1//1/1970、美元、美元、1/1/1970

然后,它变成了一个简单但缓慢的查询

SELECT products.* FROM products INNER JOIN currency ON price_currency = source_currency WHERE price_min <= price * value AND price * value <= price_max AND dest_currency = desired_currency. 
由于乘法无法优化,因此将进行全表扫描。 另一种方法是对products表进行非规范化,使价格以每种可能的货币表示,因此当您更新货币时,将重新计算价格。然后,搜索是琐碎的完全索引,你可以建立一个苹果的差异价格,你手动更新。
另外,如果您正在使用,您只需要VARCHAR3,而不是5

将更简单,所有价格都以相同的货币显示,只需进行货币转换即可。感谢您的回答,这对我的应用程序非常有帮助。