У меня есть сайт со списком классифицированных автомобилей, который я сейчас разрабатываю на PHP.Пользователь вводит информацию об автомобиле, который он ищет, используя выпадающие списки на главной странице.Когда они нажимают кнопку «Отправить», они попадают на страницу результатов, и у меня возникают проблемы.
На данный момент он настроен следующим образом:
- База данных запрашивается для любых результатов, соответствующих автомобилю, который они ищут.Запрос возвращает идентификатор автомобиля и почтовый индекс объявления;
- Затем каждое объявление проверяется на расстояние между почтовым индексом пользователя и почтовым индексом объявления.Это само по себе требует запроса к базе данных, чтобы найти координаты для отдельных почтовых индексов каждого рекламного объявления, и занимает довольно много времени для того, что может превышать 350 результатов за раз;
- Затем используется оператор if, чтобы определить, является ли расстояниеменьше или равно расстоянию, которое пользователь ввел на главной странице
- Если объявление находится в пределах допустимого расстояния, его идентификатор добавляется в массив;
- Общее количество объявлений в массиве.затем вычисляется и используется для определения переменной, зависящей от количества рекламных объявлений и количества рекламных объявлений, отображаемых на странице;
- Затем выполняется второй запрос таблицы объявлений с использованием оператора
WHERE
иидентификаторы в массиве.Например, SELECT * FROM adverts WHERE ID=1 AND ID=4 AND ID=23
........ Общее количество идентификаторов, используемых в запросе, зависит от переменной, указанной в пункте 5. Когда пользователь нажимает на следующую страницу, запрос перезапускается с позиции в массиве,он был оставлен в, а затем запрос был заново создан и выполнен.
Проблема, с которой я столкнулся, заключается в том, что для завершения требуются целые годы, и я искал более ресурсоемкий и временный способзавершить это.
Изначально планировалось, что запрос будет выполняться с предложениями WHERE для каждого из требований пользователя к автомобилю, а затем перед выводом на страницу проверяется расстояние с помощью оператора if.Это вызвало проблемы с нумерацией страниц, поскольку было невозможно определить количество рекламных объявлений, которые бы соответствовали требованиям к расстоянию от объявлений, возвращаемых в запросе, - следовательно, это делается таким образом, что условия расстояния выполняются до того, как будут собраны полные объявления, поэтомувычисляется точное количество отображаемой рекламы.
Извините, это немного долго - надеюсь, это имеет смысл.Я не включил никакого кода, потому что он сделал бы его длиннее, и это проблема с логикой, а не с реальным кодом.
Спасибо за любые предложения, которые вы можете сделать.
Кто-то запросил макет таблицы и SQL.Здесь идет .....
Таблица объявлений
ID, Марка, Модель, Цвет, Пробег, Двигатель, Год, Почтовый индекс
Таблица почтовых индексов
ID, почтовый индекс, GridN, GridE, долгота, широта
SQL для первого запроса для получения идентификатора и почтового индекса
SELECT ID, Postcode FROM adverts WHERE Make = '$subMake' AND Model = '$subModel'
и т. Д.
SQLдля второго запроса, чтобы получить информацию об объявлении, используя идентификаторы, которые соответствуют требованиям к расстоянию:
SELECT Make, Model, Year, Engine, Colour FROM adverts WHERE ID IN(1,2,6,90,112,898)
(Извините, если синтаксически неверно, это работает, что SQL является лишь приблизительным наброском из многих строкстрок запроса.)