Я пытаюсь создать следующий запрос в CI, используя ActiveRecord
SELECT *,
( 3959 * acos( cos( radians($lat) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians($lng) )
+ sin( radians($lat) )
* sin( radians( lat ) ) ) ) AS distance
FROM locations
HAVING distance <= $miles
ORDER BY distance
LIMIT 0, 20
Я пытался
$where = "( 3959 * acos( cos( radians($lat) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( lat ) ) ) ) AS distance FROM locations";
$this->db->where($where);
$this->db->having('distance <= ' . $miles);
$this->db->order_by('distance');
$this->db->limit(20, 0);
Проблема (я думаю) в том, что я уже говорю, из какой таблицы я получаю данные через $query = $this->db->get('locations');
в конце моей модели. Итак, я получаю следующую ошибку:
Произошла ошибка базы данных
Номер 1064
У вас ошибка в синтаксисе SQL;
проверьте руководство, которое соответствует
ваша версия сервера MySQL для
правильный синтаксис для использования рядом с "AS расстояние
ОТ user_profiles HAVING distance
<= 100 ЗАКАЗАТЬ <code>distance LIMI 'в
строка 5
ВЫБРАТЬ * ОТ (locations
) ГДЕ
country
= «США» И tags
= «технология» И
( 3959 * acos( cos(
radians(25.9331488) ) * cos( radians(
lat ) ) * cos( radians( lng ) -
radians(-80.1625463) ) + sin(
radians(25.9331488) ) * sin( radians(
lat ) ) ) ) AS distance FROM
locations HAVING
расстояние <= 100
ORDER BY
расстояние` ПРЕДЕЛ 20
Имя файла:
C: \ WAMP \ WWW \ MySite \ система \ базы данных \ DB_driver.php
Номер строки: 330
Некоторые вещи, на которые стоит обратить внимание ... Я использую несколько where()
функций в моей модели. Дистанционный запрос должен сосуществовать с другими предложениями.