![]() |
SQL och join
Jag har ett fungerande script som gör nästan samma sak, den såg ut såhär:
Kod:
$num_rows = intval($_GET[num]); Nu vill jag ta bort matchningen från txt filen och istället matcha mot en databas. Jag har två tabeller. postnummer: id | postnummer postnummer_tbl: zipcode | long | lat Jag vill returnera alla 'postnummer' från "postnummer" som matchar med 'zipcode' i "postnummer_tbl", i fall det är flera 'postnummer' som är lika så vill jag endast ha en rad men även räkna ut hur många som är samma. = density. Sedan vill jag para ihop rätt postnummer med 'zipcode' och hämta ut long, lat och density och göra till json kod för att kunna plotta ut på karta. Har testat bl.a: Kod:
$query = "SELECT zipcode, `long`, lat FROM postnummer_tbl JOIN postnummer ON zipcode=postnummer"; |
Vad är det för databas?
Du är ute efter en OUTER JOIN i stil med Kod:
SELECT postnummer, long, lat |
Får fram rätt data tror jag, men inte med density och det är flera postnummer som kommer flera gånger =/
En bit på vägen i alla fall! :) EDIT: Postnumret som returneras är samma på alla rader men inte long och lat (?) |
Kod:
SELECT `postnummer`.`postnummer`, `postnummer_tbl`.`long`, `postnummer_tbl`.`lat`, count(`postnummer`.`id`) AS density Annars borde denna fungera minst lika bra: PHP-kod:
|
Tack för att du har tagit dig tid!
Dock fungerar det inte, jag kör den i phpmyadmin och får 8 miljoner(!) rader svar på frågan. Och $row[0] (postnummret) blir alltid samma. Vet inte vad det kan bero på... Jag vill alltså enbart ha ut postnumren i postnummer (ca 400 poster totalt, varav många är samma och då ska density ska bli högre). |
Density kommer aldrig bli högre än antalet rader som returneras. Oavsett om du använder COUNT() eller mysql_num_rows()
Har du testat: SELECT DISTINCT ... ? och skippa GROUP BY. |
Testade exakt den här:
SELECT `postnummer`.`postnummer`, `postnummer_tbl`.`long`, `postnummer_tbl`.`lat`, count(`postnummer`.`id`) AS density FROM `postnummer_tbl`, `postnummer` WHERE `postnummer`.`postnummer`=`postnummer_tbl`.`zipcod e` Får exakt 1 rad: postnummer long lat density 32767 57.1752 13.7368 8886089 |
Prova
Kod:
$query = "SELECT POSTNUMMER as zip,count(*) AS density,zips.lat,zips.lon |
Fick 21 raders svar:
Kod:
zip density lat long |
Vart hämtar du postnummeruppgifterna ifrån och hur ofta får du uppdateringar av postnummer/koordinater?
Det tar ju inte många månader innan uppgifterna är inaktuella enligt egna erfarenheter. |
Alla tider är GMT +2. Klockan är nu 00:02. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson