PHP / MySQL Almacenamiento de búsquedas de los usuarios entre las páginas que el usuario pueda volver a ellos

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

Pregunta

Estoy escribiendo una aplicación PHP-MySQL. La aplicación permite al usuario ejecutar una búsqueda en la base de datos. Cuando se ejecuta la búsqueda, si el usuario hace clic en el botón Atrás para volver a ella después de examinar un elemento criado por ella, se les pregunta si les gustaría volver a enviar la consulta (que utiliza post). Que volver a ejecutar la búsqueda en la base de datos. Usando obtiene no daría lugar a la solicitud de reenvío -. Pero todavía sería ejecutar la búsqueda una vez más

¿Hay una manera de almacenar la búsqueda y recordar que, con el cabo de volver a ejecutar en la base de datos?

Esto se puede guardarla en la base de datos, o de alguna manera en el php - tal vez con sesiones? No puede haber una gran cantidad de datos que salen de estas búsquedas, me siento como que es probablemente demasiado para las sesiones.

La otra manera que puedo imaginar es almacenarla en la base de datos, en una tabla temporal de algún tipo. Creación de la tabla con las columnas tengo la intención de consulta, a continuación, seleccionar en un inserto. A continuación, seleccionar * de la mesa. Esto también parece más bien como una mala idea. Un montón de tablas temporales creadas dinámicamente que flotan alrededor.

Sé que esto puede hacerse. Las búsquedas guardadas son las cosas que se ven en muchas aplicaciones web. Entonces, ¿cómo se lo hace generalmente?

¿Fue útil?

Solución

memcached

o

APC

Sin embargo, noto que no está dando ninguna razón ¿Por qué que desea almacenar en caché los resultados de una búsqueda. "Debido a que es más rápido, y leí que hace que mi aplicación más escalable", es la razón más común para esto. Esto huele a la optimización prematura.

recomiendo generar la aplicación y el perfil de la misma. Lo costoso son las "búsquedas"? ¿Por qué son costosos? Es un mal diseño del esquema? ¿Es mala la indexación? ¿Es mala elección de motor de almacenamiento?

Te das cuenta que MySQL tiene una consulta caché , ¿verdad? En muchos casos esto puede ser todo lo que necesita. Pruebe a ejecutar una de sus caras de "búsqueda" consultas usando el cliente mysql y anotar el tiempo, a continuación, ejecute de nuevo. Ver?

Otros consejos

para fijar el "¿desea volver a presentar" error, puede almacenar la solicitud en la sesión o en el PP, a continuación, redirigir inmediatamente a una nueva página para realmente realizar la búsqueda:

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);
}

que luego pueden agarrar los campos de consulta de $ _SESSION [ 'search'] [22] o el PP ...

como para guardar los resultados, se puede confiar en la memoria caché del navegador, o se puede almacenar SERPs individuales en la sesión o db ... expira a cabo las antiguas en algún momento si es necesario ...

creación de una tabla de resultados está bien (y aceleraría la paginación en búsquedas complejas), pero que podría tener millones de visitas en allí, por lo que una paginación con el caché sería manera más general.

Si el usuario quiere volver a los tiempos de búsqueda o semanas más tarde, solo tiene que volver a ejecutar la búsqueda con los campos de consulta guardadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top