sql >> Databasteknik >  >> RDS >> Mysql

CakePHP fråga närmaste latitud longitud från databasen

det finns inga fler virtuella fält i cake 3 men du kan fortfarande skapa ett alias för ditt beräknade fält

Som föreslagits av @ndm är det bättre att binda $latitude och $longitude för att förhindra SQL-injektioner

$distanceField = '(3959 * acos (cos ( radians(:latitude) )
    * cos( radians( Sightings.latitude ) )
    * cos( radians( Sightings.longitude )
    - radians(:longitude) )
    + sin ( radians(:latitude) )
    * sin( radians( Sightings.latitude ) )))';

använda var

$sightings = $this->Sightings->find()
    ->select([
        'distance' => $distanceField
    ])
    ->where(["$distanceField < " => $distance])
    ->bind(':latitude', $latitude, 'float')
    ->bind(':longitude', $longitude, 'float')
    ->contain(['Photos', 'Tags']);

använder ha

$sightings = $this->Sightings->find()
    ->select([
        'distance' => $distanceField
    ])
    ->having(['distance < ' => $distance])
    ->bind(':latitude', $latitude, 'float')
    ->bind(':longitude', $longitude, 'float')
    ->contain(['Photos', 'Tags']);


  1. PostgreSQL-utlösare och grunder för lagrade funktioner

  2. T-SQL Datetime Data Type

  3. NLS_COLLATION_NAME() Funktion i Oracle

  4. Hur man konfigurerar AppArmor för PostgreSQL och TimescaleDB