2015-04-23 168 views
2

中的值寫入表格,因爲標題暗示我想基於另一個表中的列的值對一個表執行INSERT查詢,試圖創建等待列表類型系統。 這裏是我的代碼:MYSQL根據另一個表

$sql = "INSERT INTO bookings (username, tourDate, tourTime, tourNumber, guests) 
VALUES ('$username', '$tour_date', '$tour_time', '$tour_num', '$guests')"; 

$qry = "UPDATE tours 
SET available = available-(1+$guests) 
WHERE tourNum = '$tour_num'"; 

"INSERT INTO waitingList (username, tourDate, tourTime, tourNumber, guests) 
VALUES ('$username', '$tour_date', '$tour_time', '$tour_num', '$guests')"; 

在我想要的是:在旅遊

IF 可用列不= 0 THEN $ SQL ELSE 插入到waitingList

「waitingList '是一張表,其中包含與'預訂'相同的字段

迄今爲止的每一次嘗試都未能實現e這些結果。

我怎麼會去嗎?

回答

2

在表上選擇的值,而在另一個表中插入它,你可以使用這個

INSERT INTO table1 (column_name1, column_name2) 
SELECT column_name1, column_name2 FROM table2 
WHERE column_name1 = "x"; 
1

假設你有PDO擴展的工作,你應該嘗試這樣的事:

<?php 
$db = new PDO('mysql:Host=localhost;dbname=testdb;charset=utf8' , 'yourUserName', 'pw'); 
$stmt = $db->query("SELECT * FROM tours"); 
$rowCount = $stmt->rowCount(); 
if ($rowCount > 0) { 
    $stmt = "INSERT INTO bookings 
    (username, tourDate, tourTime, tourNumber, guests) 
    VALUES ('$username', '$tour_date', '$tour_time', '$tour_num', '$guests')"; 
    $updateStmt = "UPDATE tours 
    SET available = available-(1+$guests) 
    WHERE tourNum = '$tour_num'"; 
    $query = $db->exec($stmt); 
    $updateQuery = $db->exec($updateStmt); 
} 
else { 
    $stmt = "INSERT INTO waitingList 
    (username, tourDate, tourTime, tourNumber, guests) 
    VALUES ('$username', '$tour_date', '$tour_time', '$tour_num', '$guests')"; 
    $query = $db->exec($stmt); 
} 

使用SELECT查詢中的「*」有時不是很好的做法,即使這種方式有效,您應該嘗試採用更具體的字段,如表的主鍵。

+0

感謝您的快速回復,嘗試你的解決方案,但遭到了以下錯誤:非對象 上調用一個成員函數rowCount時(): 致命錯誤line referenced was '$ rowCount = $ stmt-> rowCount();' – fleggle

+0

是一個愚蠢的錯誤。由於$ db是新的PDO對象,因此應該創建變量$ stmt作爲調用查詢方法的對象,現在就嘗試它,它應該這樣做。 – zhphrd

1

您需要爲此使用innoDB表和事務。另外,我可以推薦PDO嗎?

僞碼

qty = guests+1; 

INSERT INTO bookings 
Begin transaction 
Select available from tours where tourNum = :tour_number 
If selected available - qty <= 0 
    update tours set available to 0 where tourNum = :tour_number 
    insert into waiting list 
else 
    update tours set available to available-qty 
endif 
Commit Transaction 
相關問題