簡體   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