2010-03-16 10 views
10

Trong khi tìm cách tạm thời lưu kết quả tìm kiếm khi người dùng tìm kiếm khách sạn miễn phí giữa các ngày cụ thể, tôi đã xem các bảng tạm thời.là một bảng tạm thời mysql duy nhất cho mỗi người dùng truy cập vào tập lệnh tạo ra nó ...?

Nhưng câu hỏi nào đó chưa được giải đáp ngay cả trong mysql tay .... như ...

  1. sẽ bảng tạm thời là duy nhất cho mỗi người dùng thực thi kịch bản ...? Hay nó sẽ bị ghi đè khi hai người dùng khác nhau chạy tập lệnh cùng một lúc ...?

  2. Khi nào bảng sẽ bị hủy ..? Khi người dùng đóng cửa sổ trình duyệt hoặc chỉ điều hướng khỏi trang mà tập lệnh chạy ...?

Cám ơn giải thích của bạn ...

Đây là cách tôi làm điều đó ....

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

Trả lời

29

Trích dẫn MySQL manual page of CREATE TABLE:

Bạn có thể sử dụng TEMPORARY từ khóa khi tạo bảng.
Bảng A TEMPORARY là chỉ hiển thị đối với kết nối hiện tại và bị xóa tự động khi kết nối là đóng.
Điều này có nghĩa là hai kết nối khác nhau có thể sử dụng cùng một tên tạm thời tên bảng mà không xung đột với mỗi khác hoặc với một bảng hiện tại không có TEMPORARY.

Xét rằng hai người dùng sẽ có hai kết nối riêng biệt, bảng sẽ là duy nhất cho mỗi người dùng.

Bảng tạm thời sẽ bị xóa khi kết nối đã tạo được đóng - trong PHP, ít nhất, điều đó có nghĩa là khi tập lệnh tạo trang kết thúc (Vì vậy, nói chung, ngay cả trước khi người dùng thực sự đọc trang)

+1

Nhưng khi tôi kiểm tra nó trực tuyến bảng được tạo bởi người dùng đầu tiên vẫn có sẵn cho tất cả người dùng truy cập nó sau khi anh ta ... !!! Một bảng mới không được tạo cho mỗi người dùng ... – SpikETidE

+1

Vì vậy, có thể bạn đang sử dụng kết nối tổng hợp theo một cách nào đó? – nos

+0

Kết nối tổng hợp ... là một người mới, tôi không biết khái niệm này .. tôi sẽ tìm kiếm nó trước .. – SpikETidE