我一直試圖讓這個工作使用ORDER BY和LIMIT,但它會輸出放入的所有東西。ORDER BY和LIMIT似乎不工作:PHP/Mysql - ORDER BY使用臨時表時
$lat1 = 37.349418;
$lon1 = -121.896286;
$distance = 25;
$q = "SELECT * FROM cityname WHERE feature_class = 'A' OR feature_class = 'P'";
$r = mysql_query($q) or die(mysql_error());
while ($row = mysql_fetch_array($r)) {
$lat = trim($row["latitude"]);
$lon = trim($row["longitude"]);
$name = $row["name"];
$pop = $row["population"];
$miles = distance($lat, $lon, $lat1, $lon1, "m");
$milesrounded = round($miles, 2);
if ($miles < $distance) {
if ($pop > 0) {
$q2 = "CREATE TEMPORARY TABLE IF NOT EXISTS `templocation4` (
`cityname` varchar(75) NOT NULL,
`distance` double NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1";
$r2 = mysql_query($q2) or die(mysql_error());
$q1 = "INSERT INTO templocation4 (cityname, distance) VALUES ('$name', '$milesrounded')";
$r1 = mysql_query($q1) or die(mysql_error());
$q3 = "SELECT MIN(distance) FROM templocation4 GROUP BY distance DESC LIMIT 10";
$r3 = mysql_query($q3) or die(mysql_error());
while ($row1 = mysql_fetch_array($r3)) {
echo $row1["cityname"];
echo " ";
echo $row1["distance"];
echo "<br>";
}
$q5 = "DROP TABLE templocation4";
$r5 = mysql_query($q5) or die(mysql_error());
}
}
}
表城市名具有> 250K的條目,我試圖將其分類到基於緯度/經度用戶具有輸入最近的城市的名稱。
謝謝。
我猜他們是有意義的測試代碼時,意思是 - $ Q3 = QUERY3等代碼的工作,它只是輸出都插入到臨時表中,而不是排序和限制結果。 – Go3Team
@ Go3Team:「我猜測它們在測試代碼時意味着什麼 - $ q3 = query3等等」然後,爲什麼第一個查詢叫做'q2'而第二個查詢叫做'q1'?這毫無意義。 –
q2查詢在q1之後寫入。臨時表查詢被添加來加快速度。 – Go3Team