2010-03-16 13 views
10

Mientras busco la manera de guardar temporalmente los resultados de búsqueda cuando un usuario busca un hotel gratis entre fechas particulares, me encontré con tablas temporales.es una tabla temporal mysql única para cada usuario que accede al script que la crea ...?

Pero ciertas preguntas no son respondidas, incluso en el manual MySQL .... como ...

  1. ¿La tabla temporal será único para cada usuario que ejecuta la secuencia de comandos ...? ¿O se sobrescribirá cuando dos usuarios diferentes ejecuten el script al mismo tiempo ...?

  2. ¿Cuándo se destruirá la mesa ..? Cuando el usuario cierra la ventana del navegador o simplemente se aleja de la página en la que se ejecuta el script ...?

Gracias por tus aclaraciones ...

Así es como lo hago ....

$table = "CREATE OR REPLACE TEMPORARY TABLE $free_room(
       room_id INT(5), 
       room_name VARCHAR(150), 
       max_persons INT(1), 
       rooms_free INT(1), 
       room_price INT(6), 
       hotel_id INT(4), 
       hotel_name VARCHAR(100), 
       hotel_stars INT(1), 
       hotel_type INT(1)) ENGINE=MEMORY"; 

    $query_getFreeRooms = "INSERT INTO $free_room 
          SELECT $rooms.room_id, 
            $rooms.room_name, 
            $rooms.max_persons, 
            $rooms.total_rooms - $rooms.booked_rooms AS rooms_free, 
            $rooms.room_price, 
            $hotels.hotel_id, 
            $hotels.hotel_name, 
            $hotels.hotel_stars, 
            $hotels.hotel_type 
          FROM $hotels,$rooms 
          WHERE $rooms.room_id NOT IN (SELECT room_id 
                 FROM $reservations 
                 WHERE $dateCheck) 
          AND $hotels.hotel_city = '$city_search1' 
          AND $hotels.hotel_id = $rooms.hotel_id 
          AND $hotels.hotel_deleted = '0' 
          AND $rooms.room_deleted = '0'"; 

Respuesta

29

Citando al MySQL manual page of CREATE TABLE:

Usted puede utilizar el TEMPORARY palabra clave cuando creando una tabla. Un
TEMPORARY tabla es visible sólo para la conexión actual , y se deja caer automáticamente cuando la conexión está cerrada .
Esto significa que dos conexiones diferentes pueden utilizar el mismo nombre de la tabla temporal sin entrar en conflicto con entre sí o con un tabla no temporal existente del mismo nombre.

Teniendo en cuenta que dos usuarios tendrán dos conexiones distintas, la tabla será única para cada usuario.

La tabla temporal se eliminará cuando se cierre la conexión que la creó: en PHP, al menos, significa cuando el script que genera la página finaliza (Entonces, generalmente, incluso antes de que los usuarios realmente lean la página)

+1

Pero cuando lo pruebo en línea, la tabla creada por el primer usuario todavía está disponible para todos los usuarios que acceden a ella después de él ... !!! No se crea una nueva tabla para cada usuario ... – SpikETidE

+1

¿Entonces quizás esté utilizando la agrupación de conexiones de alguna manera? – nos

+0

agrupación de conexiones ... siendo un recién llegado, no conozco este concepto ... lo buscaré primero ... – SpikETidE

Cuestiones relacionadas