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

StackOverflow https://stackoverflow.com/questions/2125977

Вопрос

Я пишу приложение php-mysql.Приложение позволяет пользователю выполнять поиск по базе данных.Если при запуске поиска пользователь нажимает кнопку «Назад», чтобы вернуться к нему после изучения поднятого им элемента, ему задается вопрос, хотят ли они повторно отправить запрос (он использует сообщение).Что позволило бы повторно запустить поиск в базе данных.Использование get не приведет к запросу на повторную публикацию, но поиск все равно будет запущен снова.

Есть ли способ сохранить результаты поиска и вызвать их без повторного запуска в базе данных?

Это может быть сохранение в базе данных или как-то в php - может быть, с помощью сессий?В результате этих поисков может быть получено много данных, мне кажется, что их слишком много для сеансов.

Другой способ, который я могу себе представить, — это сохранить его в базе данных, в какой-то временной таблице.Создание таблицы со столбцами, которые я собираюсь запросить, а затем выбор вставки.Затем выбираем * из таблицы.Это тоже кажется плохой идеей.Множество динамически создаваемых временных таблиц.

Я знаю, что это можно сделать.Сохраненные поисковые запросы — это то, что вы видите во многих веб-приложениях.Так как же это вообще делается?

Это было полезно?

Решение

кэширование памяти

или

БТР

Однако я заметил, что вы не даете никаких объяснений. почему вы хотите кэшировать результаты поиска.«Потому что это быстрее, и я читал, что это делает мое приложение более масштабируемым», — вот обычная причина этого.Это пахнет преждевременной оптимизацией.

Я рекомендую вам создать свое приложение и профилировать его.Насколько дороги эти «поиски»? Почему они дорогие?Это плохой дизайн схемы?Это плохая индексация?Это плохой выбор механизма хранения?

Вы понимаете, что MySQL имеет кэш запросов, верно?Во многих случаях это может быть все, что вам нужно.Попробуйте выполнить один из ваших дорогостоящих «поисковых» запросов с помощью клиента MySQL и зафиксируйте время, а затем запустите его еще раз.Видеть?

Другие советы

Чтобы исправить ошибку «вы хотите повторно отправить», вы можете сохранить запрос в сеансе или в базе данных, а затем немедленно перенаправить на новую страницу, чтобы фактически выполнить поиск:

search.php?searchId=22

if (isset($_GET['searchId'])) {
  $search = $_SESSION['search'][$_GET['searchId'];
  // do search
} elseif (isset($_POST['search'])) {
  $_SESSION['search'][] = $_POST;
  header('Location: search.php?searchId=' . (count($_SESSION['search']) - 1);
}

который затем может получить поля запроса из $_SESSION['search'][22] или базы данных...

что касается сохранения результатов, вы можете положиться на кеш браузера или хранить отдельные результаты поиска в сеансе или в базе данных...в какой-то момент срок действия старых истекает, если это необходимо...

создание таблицы результатов — это нормально (и ускорит разбиение на страницы при сложных поисках), но потенциально там могут быть миллионы совпадений, поэтому разбиение на страницы с кешированием было бы более универсальным способом.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top