0

PHP を使用して SQL コードを出力し、JSON から Ajax にデータを返し、そこからドロップダウンを設定しています。データが半径内の近くにある場合、ケーブル番号のドロップダウンに複数のオプションを表示するという考えですが、私が抱えている問題は、その半径内に6つのオプションがある場合、6回のような同じ値を表示することです...たとえば、セクション 1、2、3、4、および 5 を持つケーブル番号 1000 と、セクション番号 1、2、3、および 4 を持つケーブル番号 1001 が半径 50 フィート以内にある場合、ケーブル番号 1000 と 1001 のみが発生する必要があります。ドロップダウンにあり、セクション番号の処理が異なります(この質問とは無関係です)...問題は、ドロップダウンにケーブル番号1000が5回表示されることです(DBのそのケーブル番号のセクション番号と同じ数)、1001ケーブルについても同様です数字、4回表示、そのため、ドロップダウンに 9 つのケーブル番号があり、すべて同じ番号です。php/sql で 2 つのケーブル番号だけを表示し、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 () {}
});
};
4

1 に答える 1

0

さて、最終的には、HAVING DISTANCE の前に「GROUP BY cable_no」を追加することでうまくいくことがわかりました。ありがとう。

于 2013-06-27T19:01:26.900 に答える