繁体   English   中英

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

[英]Combining two queries into a single query

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

我已经尝试了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,并且您已经从会话中获取了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']
      )
   );
}

应该足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM