【问题标题】:php pg_fetch_array only show first resultphp pg_fetch_array 只显示第一个结果
【发布时间】:2021-11-01 00:25:43
【问题描述】:

我查询以检查一个点(输入)是否与 php 中的多边形相交:

$sql1="SELECT ST_intersects((ST_SetSRID( ST_Point($startlng, $startlat),4326))
                    , zona_bahaya.geom) as intersek
                    FROM zona_bahaya";
$query1 = pg_query($conn,$sql1);
$check_location = pg_fetch_array($query1);  
if (in_array('t',$check_location)) {
dosemthing1;} 
else {dosomething2;}

在我更新数据之前它可以正常工作
数据更新后,当我检查 pg_fetch_array 结果时它只显示第一行。这是结果{"0":"f","intersek":"f"} .
我尝试从 pgadmin 进行检查,它可以显示 8 个结果(1 个真(相交)和 7 个假(不相交)),使用此查询的更新数据:

SELECT ST_intersects((ST_SetSRID( ST_Point(110.18898065505843, -7.9634510320131175),4326))
                    , zona_bahaya.geom) as intersek
                    FROM zona_bahaya;

为了解决这个问题,我将查询结果降序排列,因此“真”将是第一个,如下所示:

order by intersek desc

谁能帮我找出只显示第一行的方法???

这里有一些来自 STAsText(zonabahaya.geom) 的 geom 不是全部:MULTIPOLYGON(((110.790892426072 -8.19307615541514,110.791999687385 -8.19318330973567,110.794393723931 -8.1927980624753,110.794586347561 -8.19205508561603,110.795329324421 -8.19120203811094,110.796540101525 -8.19023891996003,110.797503219676 -8.18933083713203,110.798576408472 -8.18919324882476,110.79929186767 -8.18957849608512,110.800337538805 -8.19059664955894,110.800585197758 -8.19150473238694,110.80022746816 -8.19238529755349,110.799787185576 -8.19290813312112,110.799589319279 -8.19300706626968,110.798788231202 -8.19299429992581,110.798537293576 -8.19311976873883,110.79850269889 -8.1933090511224,110.798620939451 -8.19433728092441)))

【问题讨论】:

  • 你可以为zona_bahaya.geom添加一个样本吗?
  • @JimJones Jones 我用一些几何图形更新了这个问题。是你想要的吗?

标签: php sql postgresql postgis pgadmin-4


【解决方案1】:

为了只过滤相交的记录,您必须在WHERE 子句中使用ST_Intersects

SELECT *
FROM zona_bahaya
WHERE ST_Intersects(ST_SetSRID(ST_Point(110.18, -7.96),4326),zona_bahaya.geom);
  • 既然您正在处理点和多边形,也许您也应该看看ST_Contains

如果您只想获取第一行,则必须在查询中设置限制 - 使用 LIMIT 1FETCH FIRST ROW ONLY - 但只有与 ORDER BY 结合使用才有意义,例如

SELECT *
FROM zona_bahaya
JOIN points ON ST_Intersects(points.geom,zona_bahaya.geom)
ORDER BY gid
FETCH FIRST ROW ONLY;  

演示:db<>fiddle

【讨论】:

  • 我不确定这是我要寻找的答案,因为问题来自 php。但最好只显示真实的。
猜你喜欢
  • 2017-12-12
  • 2021-02-01
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
相关资源
最近更新 更多