11

ユーザーが特定の日付の間に無料のホテルを検索したときに検索結果を一時的に保存する方法を探しているときに、一時テーブルに出くわしました。

しかし、特定の質問はmysqlマニュアルでも答えられていません....のように...

  1. 一時テーブルは、スクリプトを実行するユーザーごとに一意になりますか? それとも、2 人の異なるユーザーが同時にスクリプトを実行すると上書きされますか?

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

1 に答える 1

32

のMySQLマニュアルページをCREATE TABLE引用:

TEMPORARYテーブルを作成するときにキーワードを使用できます。テーブルは現在の接続に対してのみ表示され
接続が閉じられると自動的に削除されます。これは、2 つの異なる接続が、互いに競合したり、同じ名前の既存の非 TEMPORARY テーブルと競合したりすることなく、同じ一時テーブル名を使用できることを意味します。TEMPORARY

2 人のユーザーが 2 つの異なる接続を持つことを考慮すると、テーブルはユーザーごとに一意になります。

一時テーブルは、それを作成した接続が閉じられると削除されます。少なくとも PHP では、ページを生成するスクリプトが終了したときを意味します(したがって、通常、ユーザーが実際にページを読み取る前であっても)。

于 2010-03-16T12:44:10.030 に答える