Я использую следующий SQL-запрос в своем PHP-скрипте:
$lng = some lng;
$lat = some lat;
$usertable = $my_db_table;
$interval = 30;
$name = "John Doe";
$query = "SELECT *, POW(69.1*(lat-$lat),2)+POW(69.1*($lng-lng)*COS(lat/57.3),2) AS distance FROM $usertable WHERE obsDt BETWEEN DATE_SUB(NOW(), INTERVAL $interval DAY) AND name = '$name' HAVING distance < SQRT(5)";
Этот код работает, как и ожидалось, за исключением предложения AND name = '$name'
, где он часто возвращает строки со значениями столбца name
, отличными от тех, которые равны только $comname
. Что-то не так в моем синтаксисе?
Есть ли другой способ, которым я должен заявлять или упорядочивать эти пункты?
Спасибо, звучит как хорошая практика. Как бы я сделал это в моем случае на PHP?
В вашем запросе возникла серьезная проблема
obsDt BETWEEN DATE_SUB(NOW(), INTERVAL $interval DAY) AND name = '$name' HAVING distance < SQRT(5)";
В этой части вы взяли предложение between
, поэтому между двумя вариантами, например между какими двумя значениями, вы пропустили это и написали name = '$ name'
Вам просто нужно закончить предложение BETWEEN, указав дату окончания:
например.
BETWEEN '2019-01-01 00:00:00' AND '2019-01-02 00:00:00'
Понятно, как говорит @RahulMeshram, но это именно моя проблема.
Это сработало для меня: WHERE name = '$name' AND obsDt BETWEEN DATE_SUB(NOW(), INTERVAL $interval DAY) AND NOW()
$lng = some lng;
$lat = some lat;
$usertable = $my_db_table;
$interval = 30;
$name = "John Doe";
$dbh = new PDO("mysql:host=localhost;dbname=database;","root","");
$sql = "SELECT *,POW(69.1*(lat-:lat),2)+POW(69.1*(:lng-lng)*COS(lat/57.3),2) AS distance";
$sql . = " FROM ".$usertable;
$sql . = " WHERE obsDt < DATE_SUB(NOW(), INTERVAL :interval DAY)"
$sql . = " AND name = :name HAVING distance < SQRT(5)";
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':lat' => $lat, ':lng' => $lng,':name' => $name, ':interval' => $interval));
$res = $sth->fetchAll();
Научитесь использовать параметры! Не путайте строки запроса со значениями параметров.