Php 计算mysql连接、联合中符合条件的行数>;=和<;=? 从表中选择*,其中a=4,b=16,c=26

Php 计算mysql连接、联合中符合条件的行数>;=和<;=? 从表中选择*,其中a=4,b=16,c=26,php,mysql,join,union,Php,Mysql,Join,Union,现在我想从查询1中选择至少满足以下两个条件的结果 Select * FROM table WHERE a<=9 AND a>=4 AND b<=20 AND b>=16 AND c<=30 AND c>=26 从a=5、B=17和C=27的表格中选择* 数字可以是任何数字,尽管在查询2中,小于eqaul的数字更低,大于eqaul的数字更高 我希望能够用一个数字来设置查询2中要满足的最小巧合数。 例如,查询2必须满足5个巧合,才能在查询1中进行选择 这是关于

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

Select * FROM table WHERE a<=9 AND a>=4 AND b<=20 AND b>=16 AND c<=30 AND c>=26
从a=5、B=17和C=27的表格中选择*
数字可以是任何数字,尽管在查询2中,小于eqaul的数字更低,大于eqaul的数字更高

我希望能够用一个数字来设置查询2中要满足的最小巧合数。 例如,查询2必须满足5个巧合,才能在查询1中进行选择


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

尝试使用原生MySQL函数:


假设第二个查询是这样的:-

SELECT * FROM t1 WHERE key_col BETWEEN '2' AND '3';
Select*,a=5时为CASE,B=17时为1 ELSE 0 END+CASE,C=27时为1 ELSE 0 END+CASE,然后1 ELSE 0 END作为匹配计数
从桌子上
其中a=5
或B=17
或C=27
具有匹配计数>=2的
可能将第一个查询用作子选择而不是表


编辑-阅读您的最新回复我想我误解了您的要求。但是,您可能会找到每个值之间的差异,获得每个差异的绝对值,然后将它们相加,以查看差异有多大。

我认为这种查询可以完成您的工作

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
选择
*,
(如果(a=5,1,0)+如果(B=17,1,0)+如果(C=27,1,0))
完全匹配
从桌子上
总匹配>=2

如果下界始终较高,而上界始终较低(在第二个查询中),则第一个查询是多余的。否,因为我想从第二个查询中进行子选择,所以在查询1中所有正匹配,但在第二个查询中指定数量的匹配。对不起,您能告诉我们更多有关您想要的结果的信息吗。我不明白。另外,告诉我们你的表中有哪些列。基本上我想用一个数字,比如说5,如果值在3到7之间的记录之间匹配,我想选择3到7之间的所有值,但在第二次查询中,由于要选择的数字很多,所以我希望在不同的范围内(而不是2,一个较低的范围,比如1)找到更接近5的匹配项,因此我将检查查询2中的5=4,正值。假设在查询1中有70个数字,所有的正匹配都使用2的范围,那么现在我希望在这70个数字中至少有50个匹配,在分析的前70个数字中有一个最小的范围@拉赫b=16
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
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