php - 将两个查询合并为一个查询

标签 php mysql sql database pdo

我有两个查询,我想将它们合并为一个,以便它只返回数据库中的一行。

我已尝试UNION,但我不断收到错误。谁能告诉我它的代码吗?

以下是我的疑问:

if(isset($_POST["response"]))
{
    $query = "INSERT INTO response(response) VALUES (:response)";
    $statement = $conn->prepare($query);
    $statement->execute(
    array(
    ':response' => $_POST["response"]
    )
        );
    $query = " INSERT INTO response (student_id)
SELECT studentid
FROM student
WHERE studentid = '".$_SESSION['studentid']."'";
 $statement = $conn->prepare($query);
    $statement->execute(

        );

最佳答案

UNION 用于将多个 SELECT 查询组合成一个结果集。检查 mySQL(或任何通用 ANSI SQL)文档。

无论如何,当您看起来正在插入同一个表中并且可能希望将所有内容插入同一个表中的同一时,您会无缘无故地进行两个 INSERT 查询。现在您将创建 2 行而不是 1 行。您可以插入多个字段作为单个查询的一部分。

我在想:

if(isset($_POST["response"]))
{
    $query = "INSERT INTO response (student_id, response) SELECT studentid, :response FROM student WHERE studentid = :studentID";
    $statement = $conn->prepare($query);
    $statement->execute(
      array(
        ':response' => $_POST["response"],
        ':studentID' => $_SESSION['studentid']
      )
   );
}

但是,由于您只需要表中的studentID,并且您已经从 session 中获得了studentID,因此从students 表中进行选择似乎毫无意义。唯一的异常(exception)可能是,如果您需要验证 session 中的值是否正确 - 但在将其添加到 session 之前您肯定已经验证过它吗?如果您还没有,您当然应该这样做。

其实很简单

if(isset($_POST["response"]))
{
    $query = "INSERT INTO response (student_id, response) VALUES (:studentID, :response)";
    $statement = $conn->prepare($query);
    $statement->execute(
      array(
        ':response' => $_POST["response"],
        ':studentID' => $_SESSION['studentid']
      )
   );
}

应该足够了。

关于php - 将两个查询合并为一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48682803/

相关文章:

php - Laravel 集合在 map 内部递增无法使用箭头功能

php - jQuery Time ago 来自时间戳?

mysql - 将所有记录保留在 "WHERE IN()"子句中,即使找不到

sql - Android:获取列中的最高值

php - 使用 LEFT JOIN 通过 Form 插入 MySQL

php - 如何在结果中以 0 排序

java - 如何将字符串转换为 "datetime"友好的格式?

mysql - 连接和 SUMS?

mysql - 跨多个表的 SQL 查询

sql - 基于层次结构树将员工关联到部门