使用计算进行查询排序

我有这个错误:


致命错误:未捕获的错误:在第 15 行抛出的距离()#1 {main} 中的布尔值调用成员函数 fetch()


我需要计算的是表中所有位置之间的距离,每个位置都是唯一的lat,并且long我定义了一个位置并对其进行排序 DESC 并获取照片和标题:


id |  Country |  photo  |  p_latitude |  p_longtitude

1     japan      1.jpg      32.125         35.123

2     Chian      2.jpg      56.125         50.123

3     USA        3.jpg      42.125         90.123



 function distance() {

        global $con;

    $lat1= 36.2048;

    $lang1= 138.2529;



    $query = 'SELECT *, CASE

        WHEN '. $lat1 .' = `p_latitude` && '. $lang1 .' = `p_longtitude` THEN  0 ELSE

            DEGREES(ACOS(SIN(RADIANS(`p_latitude`)) * SIN(RADIANS('. $lat1 .')) +COS(RADIANS(`lat`)) * COS(RADIANS('. $lat1 .')) * COS(RADIANS(`p_longtitude`-'. $lang1 .'))))* 69.09

        END as distance

    FROM `posts`

    ORDER BY distance desc';


    $resd = $con->query($query);

       while($row_ratessada= $resd->fetch()){

                    $post_rate= $row_ratessada['post_title'];


           echo "this is the title"." ".$post_rate;


       }  


    } 


BIG阳
浏览 91回答 2
2回答

繁星淼淼

在您的查询中,您尝试访问列lat=> (COS(RADIANS(`lat`))- 尝试将其更改为(COS(RADIANS(`p_latitude`))

牧羊人nacy

您可以使用表表达式预先计算距离,然后在ORDER BY子句中使用它:select *from ( -- the table expression "x" starts here  select     *,    case ... end as distance  from posts) xorder by distance desc
打开App,查看更多内容
随时随地看视频慕课网APP