PHP: комбинация наличия и где не работает в запросе MySQL

У меня есть таблица с именем Сообщения, где одна запись содержит то же, что и следующее:

longtitude = 4.867478333333334
latitude = 52.31819833333334
username = 'pb'

Если я сделаю запрос к таблице с ниже:

$longitude=4.867478333333334
$latitude=52.31819833333334
$username='pb'
$search=''
$visibledistance=2

используя следующий запрос mysql:

$query=("SELECT
subject,username,message,timestamp,(
6371 * acos (
cos ( radians('$latitude') )
* cos( radians( Messages.latitude ) )
* cos( radians( Messages.longitude ) - radians('$longitude') )
+ sin ( radians('$latitude') )
* sin( radians( Messages.latitude ) )
)
) AS distance FROM Messages WHERE username ='pb'  AND ((subject LIKE        '%$search%') OR (message LIKE '%$search%'))  GROUP BY subject

HAVING distance < '$visibledistance'
ORDER BY timestamp");
$sth = mysql_query($query);

Я не получаю результатов. Если я удаляю расстояние < ‘$ visibledistance’ Я получаю все записи, соответствующие оставшимся критериям, так что нет ничего плохого ни в чем, кроме его части расстояния. Может ли кто-нибудь помочь мне понять, как я могу сделать это правильно?

Спасибо!

-1

Решение

если у вас есть числовое значение, вы должны избегать одинарных кавычек вокруг переменных

и вы должны использовать Concat для как

(если вы используете ‘$ visibledistance’, вы HAVING distance < '4' (Вы оцениваете расстояние до строки)

Глядя на ваш код
вы не используете функцию агрегирования, поэтому вам не нужно иметь возможность использовать where (но noy alias) для fliter и distcint вместо группировки по

  $query=("SELECT distinct
subject,username,message,timestamp,(
6371 * acos (
cos ( radians($latitude) )
* cos( radians( Messages.latitude ) )
* cos( radians( Messages.longitude ) - radians($longitude) )
+ sin ( radians($latitude) )
* sin( radians( Messages.latitude ) )
)
) AS distance FROM Messages WHERE username ='pb'  AND ((subject LIKE concat('%', '$search', '%')
OR (message LIKE concat('%','$search','%'))

WHERE (
6371 * acos (
cos ( radians($latitude) )
* cos( radians( Messages.latitude ) )
* cos( radians( Messages.longitude ) - radians($longitude) )
+ sin ( radians($latitude) )
* sin( radians( Messages.latitude ) )
)
) < $visibledistance
ORDER BY timestamp");
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]