PHP MySQL - 如果值不存在于两个表中则插入
PHP MySQL - Insert if the value doesn't exist in two tables
所以我有 2 个 table,“rooms”和“scheds”。
我还有一个输入表单,其中将值插入到这 2 tables.
这是输入的样子:
房间号:________________
Capacity:________________
-[提交按钮]-
程序:
当我输入房间 ID 和容量时,它应该按原样将值插入 rooms table,然后插入 scheds table 它将在 roomid 列中插入 2 个相同的房间 ID 值,并自动将“1st”和“2nd”连续添加到 semester列。
我遇到的唯一问题是,我正在考虑两种方法来解决这个问题,但不幸的是,我似乎无法获得正确的代码:
1. 如果 Room ID 在 rooms table 中具有完全相同的值,则不应再将其插入到两个 table 中,而是回显房间已经存在。
2. 如果 Room ID 在 scheds table 中已经有“1st”和“2nd”学期值,则回显房间已经存在。
这是“房间”table.
+----+--------+----------+
| id | roomid | capacity |
+----+--------+----------+
| 1 | NB201 | 30 |
+----+--------+----------+
| 2 | NB202 | 30 |
+----+--------+----------+
这是“scheds”table。
+----+--------+----------+
| id | roomid | semester |
+----+--------+----------+
| 1 | NB201 | 1st |
+----+--------+----------+
| 2 | NB201 | 2nd |
+----+--------+----------+
| 3 | NB202 | 1st |
+----+--------+----------+
| 4 | NB202 | 2nd |
+----+--------+----------+
以下是我目前正在处理的代码。
<?php
if($_POST){
try{
//write query
$query = "INSERT INTO rooms SET roomid = ?, capacity = ?, roomimage = ?";
//prepare query for excecution
$stmt = $con->prepare($query);
//bind the parameters
$stmt->bindParam(1, $_POST['roomid']);
$stmt->bindParam(2, $_POST['capacity']);
$stmt->bindParam(3, $_POST['roomimage']);
// Execute the query
if($stmt->execute()){
echo "<div class='btn-success'>Room was successfully saved.</div>";
}else{
echo "<div class='btn-danger'>Unable to save room.</div>";
}
}catch(PDOException $exception){ //to handle error
echo "<div class='btn-danger'>Error: " . $exception->getMessage() . "</div>";
}
}
?>
<?php
if($_POST){
try{
//-----2 semesters-----
if($_POST['semester']=='2'){
//write query
$query_roomsched1 = "INSERT INTO sched_2014_2015 SET roomid = ?, semester = ?";
//prepare query for excecution
$stmt = $con->prepare($query_roomsched1);
//bind the parameters
$stmt->bindParam(1, $_POST['roomid']);
$stmt->bindValue(2, '1st');
// Execute the query
if($stmt->execute()){
echo "<div class='btn-success'>Schedule table for 1st semester was successfully created.</div>";
}else{
echo "<div class='btn-danger'>Unable to create schedule table for 1st semester.</div>";
}
//write query
$query_roomsched2 = "INSERT INTO sched_2014_2015 SET roomid = ?, semester = ?";
//prepare query for excecution
$stmt = $con->prepare($query_roomsched2);
//bind the parameters
$stmt->bindParam(1, $_POST['roomid']);
$stmt->bindValue(2, '2nd');
// Execute the query
if($stmt->execute()){
echo "<div class='btn-success'>Schedule table for 2nd semester was successfully created.</div>";
}else{
echo "<div class='btn-danger'>Unable to create schedule table for 2nd semester.</div>";
}
}catch(PDOException $exception){ //to handle error
echo "<div class='btn-danger'>Error: " . $exception->getMessage() . "</div>";
}
}
?>
如果要检查两个表中是否都存在 "id's",可以使用 JOIN 和条件语句来使用以下内容。你可以根据自己的情况来决定是否插入。
<?php
$user = 'xxxx';
$pass = 'xxxx';
$con = new PDO("mysql:host=localhost;dbname=your_db", $user, $pass);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $con->prepare("
SELECT *
FROM rooms
LEFT JOIN scheds
ON rooms.roomid=scheds.roomid
WHERE rooms.roomid= 'NB201'
");
$stmt->execute();
if($stmt->rowCount() > 0){
echo "It exists."; // do NOT INSERT
}
else{
echo "It does not exist."; // do the INSERT
}
您也可以通过更改
来尝试 INNER JOIN
LEFT JOIN scheds
到
INNER JOIN scheds
如果使用 LEFT JOIN 没有得到想要的结果。
所以我有 2 个 table,“rooms”和“scheds”。 我还有一个输入表单,其中将值插入到这 2 tables.
这是输入的样子:
房间号:________________
Capacity:________________
-[提交按钮]-
程序:
当我输入房间 ID 和容量时,它应该按原样将值插入 rooms table,然后插入 scheds table 它将在 roomid 列中插入 2 个相同的房间 ID 值,并自动将“1st”和“2nd”连续添加到 semester列。
我遇到的唯一问题是,我正在考虑两种方法来解决这个问题,但不幸的是,我似乎无法获得正确的代码:
1. 如果 Room ID 在 rooms table 中具有完全相同的值,则不应再将其插入到两个 table 中,而是回显房间已经存在。
2. 如果 Room ID 在 scheds table 中已经有“1st”和“2nd”学期值,则回显房间已经存在。
这是“房间”table.
+----+--------+----------+
| id | roomid | capacity |
+----+--------+----------+
| 1 | NB201 | 30 |
+----+--------+----------+
| 2 | NB202 | 30 |
+----+--------+----------+
这是“scheds”table。
+----+--------+----------+
| id | roomid | semester |
+----+--------+----------+
| 1 | NB201 | 1st |
+----+--------+----------+
| 2 | NB201 | 2nd |
+----+--------+----------+
| 3 | NB202 | 1st |
+----+--------+----------+
| 4 | NB202 | 2nd |
+----+--------+----------+
以下是我目前正在处理的代码。
<?php
if($_POST){
try{
//write query
$query = "INSERT INTO rooms SET roomid = ?, capacity = ?, roomimage = ?";
//prepare query for excecution
$stmt = $con->prepare($query);
//bind the parameters
$stmt->bindParam(1, $_POST['roomid']);
$stmt->bindParam(2, $_POST['capacity']);
$stmt->bindParam(3, $_POST['roomimage']);
// Execute the query
if($stmt->execute()){
echo "<div class='btn-success'>Room was successfully saved.</div>";
}else{
echo "<div class='btn-danger'>Unable to save room.</div>";
}
}catch(PDOException $exception){ //to handle error
echo "<div class='btn-danger'>Error: " . $exception->getMessage() . "</div>";
}
}
?>
<?php
if($_POST){
try{
//-----2 semesters-----
if($_POST['semester']=='2'){
//write query
$query_roomsched1 = "INSERT INTO sched_2014_2015 SET roomid = ?, semester = ?";
//prepare query for excecution
$stmt = $con->prepare($query_roomsched1);
//bind the parameters
$stmt->bindParam(1, $_POST['roomid']);
$stmt->bindValue(2, '1st');
// Execute the query
if($stmt->execute()){
echo "<div class='btn-success'>Schedule table for 1st semester was successfully created.</div>";
}else{
echo "<div class='btn-danger'>Unable to create schedule table for 1st semester.</div>";
}
//write query
$query_roomsched2 = "INSERT INTO sched_2014_2015 SET roomid = ?, semester = ?";
//prepare query for excecution
$stmt = $con->prepare($query_roomsched2);
//bind the parameters
$stmt->bindParam(1, $_POST['roomid']);
$stmt->bindValue(2, '2nd');
// Execute the query
if($stmt->execute()){
echo "<div class='btn-success'>Schedule table for 2nd semester was successfully created.</div>";
}else{
echo "<div class='btn-danger'>Unable to create schedule table for 2nd semester.</div>";
}
}catch(PDOException $exception){ //to handle error
echo "<div class='btn-danger'>Error: " . $exception->getMessage() . "</div>";
}
}
?>
如果要检查两个表中是否都存在 "id's",可以使用 JOIN 和条件语句来使用以下内容。你可以根据自己的情况来决定是否插入。
<?php
$user = 'xxxx';
$pass = 'xxxx';
$con = new PDO("mysql:host=localhost;dbname=your_db", $user, $pass);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $con->prepare("
SELECT *
FROM rooms
LEFT JOIN scheds
ON rooms.roomid=scheds.roomid
WHERE rooms.roomid= 'NB201'
");
$stmt->execute();
if($stmt->rowCount() > 0){
echo "It exists."; // do NOT INSERT
}
else{
echo "It does not exist."; // do the INSERT
}
您也可以通过更改
来尝试 INNER JOINLEFT JOIN scheds
到
INNER JOIN scheds
如果使用 LEFT JOIN 没有得到想要的结果。