2017-02-24 118 views
0

我想選擇第一個可用值'name'並將其設置爲已採用。是否有可能在一個查詢中完成?在一個查詢中選擇一個值並更新狀態

這是我會做兩個查詢:

my_table 
id, name, active 

$sql="SELECT id, name FROM my_table WHERE active='N' LIMIT 1"; 
$result = mysqli_query($con, $sql); 
$row = mysqli_fetch_array($result); 

$id=$row["id"]; 
$name=$row["name"]; 

$sql="UPDATE my_table SET active='Y' WHERE id=$id"; 
$result=mysqli_query($con, $sql); 
+1

你的第一個'SELECT'查詢似乎有點不determistic給我。你不應該在那裏使用訂購嗎? –

+0

無論如何,SELECT有什麼意義? – Strawberry

+0

我想獲得NAME值和當然ID進行更新。 – felixRo

回答

0

不,你不能在一個更新語句返回值,所以如果你想要做2個動作(選擇&更新),你需要2查詢。

0

無需SELECT ...

UPDATE my_table 
    SET active = 'Y' 
WHERE active = 'N' 
ORDER 
    BY id 
LIMIT 1; 
+0

我仍然需要使用SELECT查詢...我如何獲得名稱值? – felixRo

+0

我不理解你,因爲我說我需要知道NAME值,但UPDATE只返回實際更改的行數。 – felixRo

+0

它似乎r0b0urd0n是正確的我需要兩個查詢。我在MySQL中不擅長,所以我認爲它可以在一個查詢中完成。 – felixRo

0

如果你不想name被然後返回,則可以只執行UPDATE聲明。它會返回你更新的行的count

假設id是主鍵的基礎上,返回的計數,可以檢查是否存在與否的行(例如,如果count是0,那麼行不存在,並且如果count爲1,行存在)。這將是一樣好SELECT * FROM my_table WHERE id = $id

0

試試這個

update my_table set active = 'Y' 
    where id in 
(select id from (SELECT id, name FROM my_table WHERE active='N' LIMIT 1)h);