计算mysql join中匹配条件的行,union> =和< =?

时间:2012-10-23 12:04:01

标签: php mysql join union

Select * FROM table WHERE a<=9 AND a>=4 AND b<=20 AND b>=16 AND c<=30 AND c>=26

现在我想最终从查询1中选择满足以下至少两个条件的结果。

Select * FROM table WHERE a<=7 AND a>=5 AND B<=19 AND B>=17 AND C<=29 AND c>=27

数字可以是任何数字,但在查询2中,这些数字低于eqaul而较高等于大于等于。

我希望能够设置在查询2中使用数字满足的最小重合次数。 例如,在查询2中必须满足5个重合,以便最终在查询1中进行选择。

这是关于范围和匹配计数,如果有更简单的方法来实现这一点。

3 个答案:

答案 0 :(得分:0)

尝试使用原生MySQL函数BEETWEN

SELECT * FROM t1 WHERE key_col BETWEEN '2' AND '3';

答案 1 :(得分:0)

认为第二次查询需要这样: -

Select *, CASE WHEN a<=7 THEN 1 ELSE 0 END + CASE WHEN  a>=5 THEN 1 ELSE 0 END + CASE WHEN B<=19 THEN 1 ELSE 0 END + CASE WHEN B>=17 THEN 1 ELSE 0 END + CASE WHEN C<=29 THEN 1 ELSE 0 END + CASE WHEN c>=27 THEN 1 ELSE 0 END AS MatchCount
FROM table 
WHERE a<=7 
OR a>=5 
OR B<=19 
OR B>=17 
OR C<=29 
OR c>=27
HAVING MatchCount >= 2

可能使用第一个查询作为子选择而不是表。

编辑 - 阅读您的最新回复我认为我误解了您的要求。但是,你可以找到每个值之间的差异,得到每个差异的绝对值,并将它们加在一起,看看这些差异有多近/远。

答案 2 :(得分:0)

我认为这种查询会完成你的工作

Select 
*,
(IF(a<=7 AND a>=5,1,0) + IF(B<=19 AND B>=17,1,0) + IF(C<=29 AND c>=27,1,0))
as totalmatch
FROM table
HAVING totalmatch >=2