查询以找到具有给定值的最匹配行的记录
我有一张有一些价值的桌子
CREATE TABLE IF NOT EXISTSproduct
(id
int(11) NOT NULL AUTO_INCREMENT,product
varchar(255) NOT NULL,value1
float NOT NULL,value2
float NOT NULL,value3
float NOT NULL, PRIMARY KEY (id
) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;INSERT INTO
product
(id
,product
,value1
,value2
,value3
) VALUES (1, 'test', 5.3, 6.8, 9), (2, 'test', 8, 9, 12), (3, 'test', 12, 15, 20), (4, 'test1', 6, 8, 10), (5, 'test1', 8, 12, 18), (6, 'test1', 12, 17, 21);
例如
id | product | value1 | value2 | value3 | 1 | test | 5.3 | 6.8 | 9 | 2 | test | 8 | 9 | 12 | 3 | test | 12 | 15 | 20 | 4 | test1 | 6 | 8 | 10 | 5 | test1 | 8 | 12 | 18 | 6 | test1 | 12 | 17 | 21 |
在这里,有两种类型的产品示例test和test1并且有一些值。 我需要通过给出value1,value2和value3 |
来获得test和test1的最佳匹配产品ex value1 = 6 value = 7 value3 = 8
在这种情况下,我需要得到
id | product | value1 | value2 | value3 | 1 | test | 5.3 | 6.8 | 9 | 4 | test1 | 6 | 8 | 10 |
请帮我写一个mysql查询。
答案 0 :(得分:0)
假设您的值是某种数字类型,您可以尝试执行某种类似于以下的查询:
SELECT *,
(abs(value1 - targetValue1) +
abs(value2 - targetValue2) +
abs(value3 - targetValue3)) AS difference
FROM products
ORDER BY
difference
targetValue1-3
是您正在寻找的产品价值。如果您只希望记录的差异低于某种阈值,那么您可以添加WHERE difference < threshold
答案 1 :(得分:0)
我建议采用以下解决方案:
选择id,product,value1,value2,value3
从
(选择id,product,value1,value2,value3,abs((value1 + value2 + value3) - (6 + 7 + 8))至少来自t_min group by id,product)t
按产品分组;
6 + 7 + 8 - 是value1 + value2 + value3
它包含子选择,但分别为test和test1返回最匹配的结果,以及您在products列中可能具有的其他不同值。