Lat ve uzun bir dizi puan belirli bir mesafe içinde olan veritabanındaki tüm kayıtları bul [kapalı]

2 Cevap php

Ben tüm örneklerini gördüm ve burada ben bugüne kadar ne var ettik.

benim tablo basittir:

schools (table name) - School_ID - lat - long - county - extrainfo

İşte benim kod:

<?php

 $con = mysql_connect("xxx","xxx","xxx");



 if (!$con) {

            die('Could not connect: ' . mysql_error());

 } else {}



 mysql_select_db("xxx", $con);

 $latitude = "36.265541";

 $longitude = "-119.207153";

 $distance = "1"; //miles



 $qry = "SELECT *, (3958.75 * ACOS(SIN(" . $latitude . " / 57.2958)*SIN(lat / 57.2958)+COS(" . $latitude . " / 57.2958)*COS(lat / 57.2958)*COS(long / 57.2958 - " . $longitude . " / 57.2958))) as distance FROM schools WHERE (3958.75 * ACOS(SIN(" . $latitude . " / 57.2958)*SIN(lat / 57.2958)+COS(" . $latitude . " / 57.2958)*COS(lat / 57.2958)*COS(long / 57.2958 - " . $longitude . " / 57.2958))) <= " . $distance;

 $results = mysql_query($qry);
 if (mysql_num_rows($results) > 0) {
            while($row = mysql_fetch_assoc($results)) {
                            print_r($row);
            }
 } else {}

 mysql_close($con);

 ?>

Bunu çalıştırmayı denediğinizde ama ben bu hatayı alıyorum:

Warning: mysql_num_rows (): Verilen argümanı geçerli bir MySQL sonuç kaynak değil

2 Cevap

İlk olarak, 'uzun' MySQL ayrılmış bir anahtar kelimedir. Bunu gibi ters tırnakların içine alın gerekir:

SELECT `long`,lat FROM schools

Ayrılmış anahtar kelimelerin tam liste burada bulunabilir: Reserved Words

PhpMyAdmin gibi bir araç erişiminiz varsa, ben orada sorgu testinin çalıştırmanızı öneririz.

Aksi takdirde, mysql_query çalıştırdıktan sonra kodunuzda bu yürütme deneyin ():

print(mysql_errno().' '.mysql_error());

Bu size MySQL tarafından üretilen hata kodu ve hata mesajı vermelidir. Sorgu anahtar kelime sorunu dışında Tamam görünüyor, ama bu kesin size söyleyecektir.

Dürüst olmak gerekirse, ben sadece PHP kodu aracılığıyla Haversine işlevi çalıştıran aracılığıyla tüm okullara ve döngü için tüm lat / uzun kapmak öneririz.