sql >> Database teknologi >  >> RDS >> Mysql

CakePHP-forespørgsel på nærmeste længdegrad fra databasen

der er ikke flere virtuelle felter i kage 3, men du kan stadig oprette et alias for dit beregnede felt

Som foreslået af @ndm må du hellere binde $latitude og $longitude for at forhindre 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 ) )))';

brug hvor

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

brug af have

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


  1. Er der nogen måde at kontrollere ydeevnen af ​​mysql indeksering

  2. Kan ikke generere forskel fra liquibase gradle plugin

  3. Brug LIMIT til at paginere resultater i MySQL-forespørgsel

  4. Hvad er forskellen mellem sletning fra table_a og truncate table table_a i MySQL?