【发布时间】:2012-08-02 16:13:07
【问题描述】:
我在处理两个不同的数据库时遇到问题。 Postgresql 和 Mysql。
我在我的网站上有一个简单的搜索,可以搜索来自特定位置和特定条件的出租物业。
在我的 Postgresql 中,一张表格保存着出租物业的坐标和半径,而在我的 Mysql 中,一张表格保存着床、房间、价格等属性。
我可以正确检索数据。但是在使用分页时。第 1 页有 5 行,第 2 页有 10 行,第 3 页有 20 行等等。顺便说一句,每页最多有 25 行。
要知道问题,让我们有一个场景:
lat = 14.00000
long = 121.00000
rad = 50000
当我向 postgresql 查询时...
SELECT * FROM postgretable WHERE ST_DWithin(lat_long,ST_GeomFromText('POINT(long lat)', 4326), rad)
我总共有 25 行。 现在我希望使用 mysql 数据库中可以找到的其他条件对其进行过滤。
其他条件:
Beds = 2
Bathrooms = 5
price 1000
SELECT * FROM mysqltable WHERE id = $result['id'] AND beds = 2,Bathrooms = 5, price = 1000
当使用来自 postgresql 的数据从 mysql 执行时 我得到了 6 个结果。
我想不出任何办法来解决这个问题。使用数组还是什么? 我知道如果我使用单个数据库并且只使用 LEFT JOIN 或任何类似的,这可以正确完成。但我正在处理两个数据库。
还有其他方法可以解决这个问题吗?谢谢
【问题讨论】:
-
如果您对数据库结构有任何控制权。为什么不将所有这些数据都放在一个数据库服务中?
-
你为什么使用 2 个不同的数据库?
-
我可以说使用两个数据库并没有什么问题,而且我当然已经在 MSSQL 下将来自两个不同服务器上的两个数据库的数据...但是两个不同的数据库系统?嗯。
-
请显示所涉及的表定义,最重要的是您正在使用的选择语句。
-
@RobertH - 与 mysql a_horse_with_no_name 相比,在 postgresql 中使用几何搜索要快得多 - 我正在使用这种语句从某个位置查询所有属性。 “SELECT * FROM postgretable WHERE ST_DWithin(lat_long,ST_GeomFromText('POINT(long lat)', 4326), radius)” - 这将返回所有属性。现在我将使用 mysql 使用结果的 foreach 过滤它们“SELECT * FROM mysqltable WHERE id = $result['id'] ANDbeds = 2,baths = 2, price = 1000”——如果接受,则添加到最终数组中,这将显示在页面上,例如最后数组有 6 行。
标签: mysql postgresql search