sql >> Databáze >  >> RDS >> Mysql

CakePHP dotaz na nejbližší zeměpisnou šířku a délku z databáze

v dortu 3 již nejsou žádná virtuální pole, ale stále můžete vytvořit alias pro vaše vypočítané pole

Jak navrhuje @ndm, měli byste raději svázat $latitude a $longitude abyste zabránili vkládání SQL

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

použití kde

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

pomocí mít

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


  1. Seznam všech indexů v databázi SQLite

  2. Vyplnění výběrového vstupního pole hodnotou z mysql

  3. Jaký je rozdíl mezi Float a Numeric/Decimal na SQL Server - SQL Server / T-SQL výukový program, část 33

  4. Cizí klíč pro více tabulek a sloupců?