[英]select with update in one query
我有一個查詢,如:
SELECT id, name, surname, fromId, toId, msg_text, readed FROM messages WHERE toId = 2;
所以我想update all selected rows.readed = 1
。 並且查詢必須返回所有選定的行。
如果可能,這些操作必須在一個查詢中執行。
對不起我的英語不好
您只能使用UPDATE查詢進行更新。 UPDATE查詢只能返回一件事:即受影響的行數。 因此,您無法在單個查詢中更新和選擇所需的值。
在這里看看更新表,然后在mySQL中返回更新的行
簡短答案:不,不可能在單個查詢中。
簡短的回答要少一些:有一種稱為命令查詢分離的方法,簡而言之,它表明命令應該執行某些操作並且不返回任何內容,而查詢則不執行任何操作並返回任何結果。 如果您打算構建良好的軟件,我建議遵循此原則。
我不會說為什么這不可能,因為我自己不是SQL專家那么多,我只能猜測,但我建議您解決問題的簡單方法。
當您得到結果時,您很可能用PHP處理它們。 假設結果按升序排序-在第一個迭代中獲取最小ID,在最后一個迭代中獲取最大ID,然后運行更新查詢:
UPDATE messages SET readed = 1 WHERE toId = ? AND (id >= <minimum id> AND id <= <maximum id>)
附帶說明-名稱和姓氏可能不是您要存儲在消息表中的名稱。
您可以使用存儲過程來做到這一點。 創建一個存儲過程,該存儲過程也執行更新和選擇。 例如:
DROP PROCEDURE IF EXISTS myproc;
delimiter //
CREATE PROCEDURE myproc()
begin
set @qry='select id, name, surname, fromId, toId, msg_text, readed from messages where toId = 2';
prepare query from @qry;
execute query;
update messages set readed=1 where toId = 2;
end //
然后,您可以通過此過程運行查詢。 例如:
$sql = "call myproc()";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
}
} else {
echo "0 results";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.