2012-11-06 21 views
2

我試圖從MySQL表中選擇一個具有最小值的行,並使用PHP更新該行的標誌列。但它不適合我。如果我把它分解成兩個查詢,它可以工作,但是將兩者結合起來不會發生任何變化。我究竟做錯了什麼?PHP和MySQL:如何結合UPDATE和SELECT(帶最小功能)查詢

這裏是什麼工作:

$flag = 1; 
$query = "SELECT MIN(value) FROM ". $myTable; 
$data = mysqli_query($dbh, $query); 
$dataSet = mysqli_fetch_row($data); 
$value = $dataSet[0]; 
$queryUpdate = "UPDATE ". $myTable . " SET flag='" . $flag . "' WHERE value='" . $value. "'"; 
$dataUpdate = mysqli_query($dbh, $queryUpdate); 

這裏是嘗試我做了,但失敗:

//attempt #1 
$flag = 1; 
$query = "UPDATE ". $myTable . " SET flag='" . $flag . "' WHERE value=(SELECT MIN(value) FROM '". $myTable . "')"; 
$data = mysqli_query($dbh, $query); 

// attempt #2 
$flag = 1; 
$query = "UPDATE ". $myTable . " SET flag='" . $flag . "' ORDER BY value ASC LIMIT 1"; 
$data = mysqli_query($dbh, $query); 

// attempt #3 
$flag = 1; 
$query = "UPDATE ". $myTable . " T1 
INNER JOIN (SELECT MIN(value) FROM ". $myTable . ") T2 
ON T1.id = T2.id 
SET T1.flag=" . $flag; 
$data = mysqli_query($dbh, $query); 

mysqli_error()返回

警告:mysqli_error()期望的是1個參數,給出0 [在$ data = mysqli_query($ dbh,$ query)行中。]

任何幫助,將不勝感激。

+5

請_please_ ** **請使用準備好的查詢.... – Neal

+0

@thatidiotguy看到我的評論上述.... – Neal

+0

在哪裏使用'mysqli_error()'?你需要傳遞它'$ dbh'。 –

回答

2

看起來像你差不多有第三種選擇。

試試這個:

$query = "UPDATE ".$myTable." 
INNER JOIN (select min(value) as value from ".$myTable.") mintable on ".$myTable.".value = mintable.value  
SET flag = ".$flag; 
+0

謝謝@ casitriona!有效!! – Naomi