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

Posted

技术标签:

【中文标题】将两个查询合并为一个查询【英文标题】:Combining two queries into a single query 【发布时间】:2018-02-08 10:09:14 【问题描述】:

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

我已经尝试过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 我看到两个插入到两个不同的表中,为什么要合并这些查询?重点是什么?如果我阅读手册,它会说:“INSERT 将新行插入现有表中。”,一个表,请参阅:dev.mysql.com/doc/refman/5.7/en/insert.html 另请参阅此答案:***.com/questions/5178697/… MySQL Insert into multiple tables? (Database normalization?)的可能重复 studentid 是响应表中的外键....我想插入响应表! 【参考方案1】:

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,并且您已经从会话中获得了 studentID,因此从 students 表中进行选择似乎毫无意义。唯一的例外可能是您需要验证会话中的值是否正确 - 但您肯定在将其添加到会话之前已经对其进行了验证吗?如果你没有,你当然应该这样做。

其实很简单

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']
      )
   );

应该足够了。

【讨论】:

没问题。出于兴趣,您选择了哪个版本?如果答案对您有帮助,请记住标记为“已接受”(请参阅​​***.com/help/someone-answers)-谢谢:-) 我选择了最底层的答案!谢谢!非常感谢! 另外一个问题,我还需要同时在表中添加学科ID....我已经写了这个: $query = "INSERT INTO response (student_id,学科_id, response) VALUES ( :studentID, :disciplineID, :response)";但是我收到一个错误,说未定义的索引:学科ID。 你把它添加到参数数组了吗?您是否通过 php 中的变量获得了这样的值?仅仅改变自己的 SQL 字符串并不是全部。从上面的代码示例中,我会认为您需要如何定义参数的模式相当清楚? 是的,我也将它添加到参数数组中,并且我也有一个变量

以上是关于将两个查询合并为一个查询的主要内容,如果未能解决你的问题,请参考以下文章

如何将这两个查询合并为一个?

mybatis查询结果如何合并为列表

如何编写查询以将两个帐户及其活动日志合并为一个? [关闭]

在 SQL 中,如何在不使用大小写的情况下将两个查询合并为一个?

将两个不同 where 的查询合并为 1

C#,Linq2Sql:是不是可以将两个可查询对象合并为一个?