Php MySql匹配获取列值接近其他列的记录(低于阈值)
我有以下坐标记录 我想要的是,得到所有记录,其中z1与任何其他记录的差异小于4阈值 这意味着在上表中,最后两条记录的差值小于4,那么我想在查询中得到它们 另外,如果存在z1=808的新记录,则应返回此记录和id为28478的记录,因为它们之间的差值小于4 有什么方法可以在MySql中实现这一点吗 或者PHP,不用说那么长时间就可以做到 编辑: 以下是数据:Php MySql匹配获取列值接近其他列的记录(低于阈值),php,mysql,sql,algorithm,select,Php,Mysql,Sql,Algorithm,Select,我有以下坐标记录 我想要的是,得到所有记录,其中z1与任何其他记录的差异小于4阈值 这意味着在上表中,最后两条记录的差值小于4,那么我想在查询中得到它们 另外,如果存在z1=808的新记录,则应返回此记录和id为28478的记录,因为它们之间的差值小于4 有什么方法可以在MySql中实现这一点吗 或者PHP,不用说那么长时间就可以做到 编辑: 以下是数据: +-------+-------+-------+-------+-------+ | id | x1 | x2 | z
+-------+-------+-------+-------+-------+
| id | x1 | x2 | z1 | z2 |
+-------+-------+-------+-------+-------+
| 28478 | -1500 | -1496 | 804 | 808 |
| 29929 | -1500 | -1496 | 1444 | 1448 |
| 30051 | -1500 | -1496 | -1168 | -1164 |
| 30346 | -1500 | -1496 | -336 | -332 |
| 28039 | -1496 | -1492 | -1128 | -1124 |
| 28969 | -1496 | -1492 | -1424 | -1420 |
| 29265 | -1496 | -1492 | -520 | -516 |
| 29872 | -1496 | -1492 | 1288 | 1292 |
| 30122 | -1496 | -1492 | -932 | -928 |
| 30846 | -1496 | -1492 | 1376 | 1204 |
| 30898 | -1496 | -1492 | 1380 | 1384 |
+-------+-------+-------+-------+-------+
我试过了
select *
from coordinates t
where
x1 between -1500 and -1500 + 4
and exists (
select 1
from coordinates t1
where t1.id <> t.id
and abs(t1.z1 - t.z1) <= 4);
但不起作用。您可以使用exists:
-两个查询都产生:
id | x1 | x2 | z1 | z2
----: | ----: | ----: | ---: | ---:
30846 | -1496 | -1492 | 1376 | 1204
30898 | -1496 | -1492 | 1380 | 1384
看,我试过了,但没有成功,我已经编辑了我的问题,插入了数据和查询,你能检查一下吗?请解释一下你说的不成功是什么意思。我用您的示例数据在我的答案中添加了一个副词:查询确实返回了所需的结果。好的,我解决了问题,我应该在查询和子查询中添加-1500和-1500+4之间的x1,如下所示:从坐标t中选择t.*,其中x1介于-1500和-1500+4之间,存在从坐标t1中选择1,其中x1介于-1500和-1500+4之间,t1.id t.id和abs1.z1-t.z1
select t.*
from mytable t
where exists (
select 1
from mytable t1
where t1.id <> t.id and t1.z1 - t.z1 between -4 and 4
)
id | x1 | x2 | z1 | z2
----: | ----: | ----: | ---: | ---:
30846 | -1496 | -1492 | 1376 | 1204
30898 | -1496 | -1492 | 1380 | 1384