我使用PHP输出一些SQL代码,然后将数据从JSON返回到Ajax,然后从中填充下拉列表。如果数据在半径范围内附近,我们的想法是让电缆号码下拉显示多个选项,但我遇到的问题是,如果该半径内有6个选项,则显示相同的值,如6次...例如,应该发生的是1000号电缆,1,2,3,4和5节,电缆号1001,节号1,2,3和4在半径50英尺范围内,因此只有电缆号1000和1001应该在下拉列表中,部分编号的处理方式不同(与此问题无关)...问题是下拉列表将显示电缆编号1000五次(DB中该电缆编号的部分编号),同样适用于1001电缆数字,显示四次,所以现在我在下拉列表中有9个电缆号码都是相同的号码。我怎样才能让我的php / sql只显示两个有线电视号码,并且没有显示9次?
我认为这种行为的罪魁祸首是因为HAVING DISTANCE和半径都是不同的,所以因为有不同的距离列,所以距离填充每行的相同电缆号...
SQL
// Define JSON array
$array = array();
$sql = <<<EOD
SELECT DISTINCT cable_no,
3959.0 * 5280.0 * acos(sin(radians($lat)) * sin(radians(extraction_worksheet.mh_lat_a))
+ cos(radians($lat)) * cos(radians(extraction_worksheet.mh_lat_a))
* cos(radians(extraction_worksheet.mh_long_a) - radians($lon))) as distance
FROM extraction_worksheet
WHERE extraction_worksheet.mh_lat_a != ''
HAVING distance <= $radius
EOD;
$result = mysql_query($sql) or die ('Error'.mysql_error());
// If DB query successful then send data to calling routine.
while ($row = mysql_fetch_array($result)) {
$array[] = $row;
}
print json_encode($array);
JS
function populate_cableno(latitude, longitude, radius) {
$.ajax({
type: 'GET',
url: './php/getcable_number.php',
data: 'latitude=' + latitude + '&longitude=' + longitude + '&radius=' + radius,
dataType: 'json',
success: function (mydata) {
if (mydata.length >= 1) {
if (mydata.length > 1) {
$("#cable_no")
.replaceWith('<select onchange="get_co_name(); get_section_no(); return false;" id="cable_no" name="cable_no"></select>');
var combo = document.getElementById("cable_no");
while (combo.firstChild) {
combo.removeChild(combo.firstChild);
};
var option = document.createElement("option");
for (var i = 0; i < mydata.length; i++) {
option = document.createElement("option");
option.text = mydata[i]['cable_no'];
option.value = mydata[i]['cable_no'];
try {
combo.add(option, null); //Standard
} catch (error) {
combo.add(option); // IE only
}
};
get_co_name();
get_section_no();
}
else {
document.forms['prepform'].elements['cable_no'].value = mydata[0]['cable_no'];
get_co_name();
get_section_no();
}
} else {
alert("There are no cables within a 2000ft radius.");
}
},
error: function () {
alert("Error...");
},
complete: function () {}
});
};
答案 0 :(得分:0)
好吧,我最终发现在HAVING DISTANCE之前加入“GROUP BY cable_no”就是这个伎俩。感谢。