2012-01-24 174 views
1

我有多個位置的結果。位置存儲在一個表中,結果存儲在另一個表中。我查詢每個結果在荷蘭的一個位置。 我將這些結果按其所在省份進行分組。之後,我使用的是經度,經度來標記每個省在谷歌地圖上的結果。結合兩個mysql查詢與不同的where子句

查詢:

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 

的問題是,所述lattitude經度我收到的那些組中的所述第一結果的最窄位置的。對弗萊福蘭來說,它是城市'萊利斯塔德',而澤蘭則是'託倫'。在'friesland'中它的準確性是因爲第一個結果並沒有指定一個城鎮,而只是該省。

得到正確的lattitude和經度我想查詢是這樣的:

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 

至極會給我這些結果:

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語句具有不同的列數

我嘗試使用子查詢,但它減慢查詢下來..它現在需要時間來運行查詢

第2次編輯:感謝@johntotetwoo我編輯聯合查詢,使其工作。 我不得不刪除順序,因爲我的mysql不喜歡這樣,不需要它真的是爲了調試時的可讀性。 我也改變了第二個查詢中的select的順序,以便將零的位置放在右列。

新的查詢

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行(我現在有一行結果和省的行數,另一行是同一省份和正確的經度和地位)。如果這些可以合併,它會完全完美!

回答

1

領域aantal添加到第二個查詢並重新工會

0

它,因爲第二個查詢沒有aantal列。

試試這個:

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 
    ORDER BY loc.land, loc.provincie, loc.gemeente, loc.plaats DESC 
      UNION 
    SELECT location_id as loc_id, loc.lat, loc.long, loc.land, loc.provincie, loc.gemeente, loc.plaats , 0 as aantal 
    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) as iTable 
+0

現在的偉大工程,謝謝! 我只是想知道它是否可以合併爲1行(我現在有一行結果和省的行數,另一行是同一省份和正確的經度和地位)。如果這些可以合併,它會完全完美! – Daan