我想在数据库中存储一堆由一对纬度和经度系列组成的路线。我希望能够获得给定密钥的所有路由。
现在我的表格设置方式如下:
RouteID订单纬度经度
但是一条路线可以有多套纬度和经度,所以它变为:
RouteID Order Latitude Longitude
1 0 X Y
1 1 X Y
1 2 X Y
1 3 X Y
1 4 X Y
2 0 X Y
2 1 X Y
我有另一个名为R的表,它有RouteID并且它引用了这个Route表。 问题是: 1.这看起来合理吗?
更新 所以另一个表称为TEMP,它具有以下格式
TempID RouteID UserID AttributeX AttributeY
当我做SQL时:
SELECT R.LATITUDE, R.LONGITUDE
FROM TEMP T, ROUTE R
WHERE T.UserID =1
ORDER BY R.ORDER ASC ;
在我的表中,目前UserID 1有两条路线,但它会打印出每个格子两次。 我的SQL错了吗?
答案 0 :(得分:2)
这对我来说很好看。
但不要使用名为R
的表来污染世界。想想那个追随你的人,R
是什么意思?
另一个表可能应该命名为Routes
,此表可能应该命名为RoutePoints
或仅Points
或其他信息。
对于SQL,如果要使用CROSS JOIN
,则使用了INNER JOIN
:
SELECT R.LATITUDE, R.LONGITUDE
FROM TEMP T INNER JOIN ROUTE R ON T.ROUTEID = R.ROUTEID
WHERE T.UserID =1
ORDER BY R.ORDER ASC
这可能有效。
答案 1 :(得分:1)
您最有可能想要使用空间填充曲线或空间索引。我使用它来存储邮政编码,只用1个操作符独立于缩放级别查询它们。欢迎您在phpclasses.org(hilbert-curve)下载我的课程。
答案 2 :(得分:0)
很大程度上取决于您在存储后要对此信息执行的操作。如果您只想打印出给定路线的地图,那么您的桌面设置就可以了。如果您想知道两条路线是相交还是重叠,您可能应该了解更多有关Geogrpahic信息系统(GIS)的信息。 GIS Stackexchange是开始提问的好地方。