PhP / MySQL Хранение Пользователь ищет между страницами, чтобы пользователь мог вернуться к ним - PullRequest
3 голосов
/ 24 января 2010

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 24 января 2010

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

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] или db ...

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

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

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

2 голосов
/ 24 января 2010

Memcached

или

APC

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

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

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

...