2015-04-23 123 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 
相关问题