У меня проблема с функцией поиска, она работает правильно, но занимает от 14 до 18 секунд для загрузки, и это вызывает у меня большую боль.
Это функция поиска, которую я использую:
$sql="select *, ( 3959 * acos( cos( radians( $lat ) ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians( $lng ) ) + sin( radians( $lat ) ) * sin( radians( `lat` ) ) ) ) AS distance FROM postcodes, details WHERE `postcode`=postcodes.outcode HAVING " . implode(" AND ", $searches)." AND isactive='y' ORDER BY `distance`";
Если у кого-то есть предложения, все они будут приветствоваться
Я потратил больше времени на это и понимаю, что делает запрос, прежде чем добавить дополнительную информацию.
Теперь это мой обновленный запрос, я попытался использовать левое соединение, но я не смог присоединиться к таблице почтового индекса в таблице карточек, и когда я отменил его, столбцы в виде столбцов, где все отображают значение null.
SELECT "column names", ( 3959 * acos( cos( radians( $lat ) ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians( $lng ) ) + sin( radians( $lat ) ) * sin( radians( `lat` ) ) )) AS distance FROM details inner JOIN car_postcodes ON details.postcode = postcodes.outcode AND distance < 100 AND payment='y' AND expired='n' ORDER BY details.price
Это значительно сократило время, затрачиваемое на выполнение запроса (примерно до 6 секунд), поэтому мне все же нужно улучшить это.
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что я не могу использовать псевдоним столбца «расстояние» для измерения расстояния между пользователем и полем внутри таблицы. Поскольку я не могу использовать псевдоним столбца в условии where.
Ответ, который я, по-видимому, прочитал на многих других сообщениях, является подбором,
Я не уверен, что вы делаете, но следующая строка подозрительна
FROM postcodes,details
Если я не ошибаюсь, это crossjoin
(если ваши таблицы большие, это просто умножит размеры и в итоге …, я просто не уверен, что вы пытаетесь сделать здесь)