我想知道是否有人可以帮助我。
我有以下两个表,位置和多边形。
positions:
----------------------------------------------
| positionID | name | information
----------------------------------------------
| 1 | Southampton | text here
| 2 | London | text here
polygons:
-------------------------------------------------------------------
| polygonID | positionID | lat | lon
-------------------------------------------------------------------
| 1 | 1 | 434343.034343 | -43.4343434
| 2 | 1 | 343343.034343 | -43.4343434
| 3 | 1 | 434343.034343 | -54.4343434
我想加入这两个表并以下列格式将它们作为数组输出。
$positions = array(
array( positionID => 1,
name => 'Southampton',
information => 'text here',
polys => array( array( Lat => 54.54299483853406,
Lng => -6.5224456787109375,
),
array( Lat => 54.648809788121866,
Lng => -6.405029296875,
),
array( Lat => 54.54020652089137,
Lng => -6.39129638671875,
),
),
),
);
我写了下面的连接语句但是我真的陷入了下一步。
SELECT * FROM (`positions`) LEFT JOIN `polygons` ON `positions`.`positionID` = `positions`.`positions`
来自连接的lat / lon数据必须存储在数组中的'polys'键上。
非常感谢任何帮助或建议。
万分感谢
答案 0 :(得分:0)
如果每个positionID有多个polygonID,您将获取大量位置副本。 我建议改为做2个查询:
$positions = array();
$query_1 = "SELECT * FROM positions";
$query_2 = "SELECT * FROM polygons";
$resource_1 = mysql_query($query_1);
while($position = mysql_fetch_assoc($resource_1))
{
$positions[$position['positionID']] = $position;
$positions[$position['positionID']]['polys'] = array();
}
$resource_2 = mysql_query($query_2);
while($polygon = mysql_fetch_assoc($resource_2))
{
$positions[$polygon['positionID']]['polys'][$polygon['polygonID']]['Lat'] = $polygon['lat'];
$positions[$polygon['positionID']]['polys'][$polygon['polygonID']]['Lon'] = $polygon['lon'];
}
(很抱歉在我的例子中使用了像mysql_query这样的弃用函数)
答案 1 :(得分:0)
您只需要一个查询,但仍需要对PHP中的结果进行一些处理:
$sql = "SELECT * FROM positions
LEFT JOIN polygons ON positions.positionID = polygons.positionID";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
$positions = array();
while ($row = mysql_fetch_assoc($result)) {
if (!isset($positions[$row['name']])) {
$positions[$row['name']] = array(
'positionID' => $row['positionID'],
'information' => $row['information'],
'polys' => array()
);
}
$positions[$row['name']]['polys'][] = array(
'lat' => $row['lat'],
'lon' => $row['lon']
);
}
print_r($positions);
}
这也将返回实际上没有任何多边形信息的位置。为防止这种情况发生,只需将LEFT JOIN
更改为JOIN
。
至于哪种效率最高,我恐怕不知道答案。最好的办法是对这种方法和Puggan Se建议的方法进行基准测试,如果可以的话。