является ли временная таблица mysql уникальной для каждого пользователя, который обращается к сценарию, который ее создает ...? - PullRequest
10 голосов
/ 16 марта 2010

При поиске способа временного сохранения результатов поиска, когда пользователь ищет отель бесплатно между конкретными датами, когда я наткнулся на временные таблицы.

Но на некоторые вопросы нет ответа даже в руководстве по mysql ... вроде ...

  1. Будет ли временная таблица уникальной для каждого пользователя, который выполняет сценарий ...? Или он будет перезаписан, когда два разных пользователя запустят сценарий одновременно ...?

  2. Когда стол будет уничтожен ..? Когда пользователь закрывает окно браузера или просто уходит со страницы, на которой выполняется скрипт ...?

Спасибо за разъяснения ...

Вот как я это делаю ....

$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'";

1 Ответ

30 голосов
/ 16 марта 2010

Цитирование справочной страницы MySQL из CREATE TABLE:

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

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

Временная таблица будет удалена при закрытии соединения, которое ее создало - по крайней мере, в PHP это означает, когда скрипт, генерирующий страницу, заканчивается (То есть, как правило, даже до того, как пользователи фактически прочитают страница)

...