【发布时间】:2012-01-24 00:04:21
【问题描述】:
我在多个位置都有结果。位置存储在一个表中,结果存储在另一个表中。我用荷兰的一个位置查询每个结果。 我将这些结果按所在省分组。之后,我使用纬度、经度在谷歌地图上标记每个省的结果。
查询:
SELECT loc.location_id as loc_id, loc.lat, loc.long, count(res.unique_id) as aantal, loc.land, loc.provincie, loc.gemeente, loc.plaats
FROM `vj_results_1618048029` AS res, vj_location AS loc
WHERE res.time > '1324635105' AND res.time < '1327313506' AND res.search_id='8070' AND (loc.lat != '0' AND loc.long != '0') AND res.location_id != '' AND res.location_id = loc.location_id AND loc.land = 'Nederland'
GROUP BY loc.provincie
ORDER BY loc.land, loc.provincie, loc.gemeente, loc.plaats DESC
结果:
loc_id lat long aantal land provincie gemeente plaats
19 52.132633 5.291266 5732 Nederland
672 52.926438 6.791355 670 Nederland Drenthe Borger-Odoorn Borger
67 52.518537 5.471422 597 Nederland Flevoland Lelystad Lelystad
401 53.1641642 5.7817542 812 Nederland Friesland
52 51.842867 5.854622 3486 Nederland Gelderland Nijmegen Nijmegen
63 53.2193835 6.5665018 890 Nederland Groningen Groningen Groningen
185 50.9555426 5.8248384 670 Nederland Limburg Sittard-Geleen Geleen
183 51.5657089 5.081203 3241 Nederland Noord-Brabant Tilburg Tilburg
168 52.632281 4.750806 6044 Nederland Noord-Holland Alkmaar Alkmaar
223 52.3116551 6.9268283 1324 Nederland Overijssel Oldenzaal Oldenzaal
37 52.0901422 5.1096649 2291 Nederland Utrecht Utrecht Utrecht
2723 51.5332946 4.2162383 413 Nederland Zeeland Tholen Tholen
65 51.924216 4.481776 5842 Nederland Zuid-Holland Rotterdam Rotterdam
问题是我收到的纬度经度是该组中第一个结果的最窄位置的经度。对于 flevoland,它是“lelystad”城市,对于 zeeland,是“tolen”镇。在“弗里斯兰”它是准确的,因为第一个结果没有指定一个城镇,只是一个省。
为了得到正确的纬度和经度,我会这样查询:
SELECT location_id as loc_id, loc.lat, loc.long, loc.land, loc.provincie, loc.gemeente, loc.plaats
FROM vj_location AS loc
WHERE (loc.lat != '0' AND loc.long != '0') AND loc.land = 'Nederland' AND loc.gemeente = '' AND loc. plaats = ''
GROUP BY loc.provincie
ORDER BY loc.land, loc.provincie, loc.gemeente, loc.plaats DESC
Wich 会给我这些结果:
loc_id lat long land provincie gemeente plaats
19 52.132633 5.291266 Nederland
697 52.9476012 6.6230586 Nederland Drenthe
1257 52.5279781 5.5953508 Nederland Flevoland
401 53.1641642 5.7817542 Nederland Friesland
235 52.045155 5.8718234 Nederland Gelderland
2732 53.2887213 6.7060867 Nederland Groningen
860 51.4427238 6.0608726 Nederland Limburg
255 51.4826537 5.2321687 Nederland Noord-Brabant
407 52.5205869 4.788474 Nederland Noord-Holland
884 52.4387814 6.5016411 Nederland Overijssel
3796 52.119508 5.1943653 Nederland Utrecht
3692 51.325362 3.6640464 Nederland Zeeland
705 52.0207975 4.4937836 Nederland Zuid-Holland
我需要将这些组合到一个查询中,其中包含第一个查询的结果和组以及第二个查询的纬度和经度。有人可以帮忙吗?
提前致谢
编辑: 我尝试使用 UNION 但它返回错误: 1222 - 使用的 SELECT 语句有不同的列数
我尝试使用子查询,但它会减慢查询速度。现在运行查询需要很长时间
第二次编辑:感谢@johntotetwoo,我编辑了联合查询以使其工作。 我不得不删除订单,因为我的 mysql 不喜欢这样,实际上不需要它是为了调试时的可读性。 我还更改了第二个查询中选择的顺序,以便将零放在右列。
新查询
SELECT *
FROM
(SELECT loc.location_id as loc_id, loc.lat, loc.long, count(res.unique_id) as aantal, loc.land, loc.provincie, loc.gemeente, loc.plaats
FROM `vj_results_1618048029` AS res, vj_location AS loc
WHERE res.time > '1324635105' AND res.time < '1327313506' AND res.search_id='8070' AND (loc.lat != '0' AND loc.long != '0') AND res.location_id != '' AND res.location_id = loc.location_id AND loc.land = 'Nederland'
GROUP BY loc.provincie
UNION
SELECT location_id as loc_id, loc.lat, loc.long, 0 as aantal, loc.land, loc.provincie, loc.gemeente, loc.plaats
FROM vj_location AS loc
WHERE (loc.lat != '0' AND loc.long != '0') AND loc.land = 'Nederland' AND loc.gemeente = '' AND loc. plaats = ''
GROUP BY loc.provincie) as iTable
现在很好用,谢谢! 我只是想知道它是否可以合并为 1 行(我现在有一排有结果和省份的编号,另一行有相同的省份和正确的经度和纬度。)如果这些可以合并,那就是完全完美!
【问题讨论】: