2013-09-23 73 views
0

我已經忍受了這一點。這是讓我堅果...無法從列中選擇最高值

我只想採取列的最大值,添加1到id,然後插入一個新的條目。

表有一欄「身份證」,並讓我們說「名」和「年齡」

的問題是$ NEW_ID變量沒有選擇ID列的最高值。我知道我做錯了什麼......但是什麼?
請幫幫忙,我知道這一定是一個非常基本的問題,但我一直在尋找這幾個小時...

$relations_table="xxx_sobipro_relations"; 

$sql="SELECT * FROM '$relations_table' ORDER BY id DESC LIMIT 1"; 
$result=mysql_query($sql); 
$row = mysql_fetch_array($result); 

$new_id = $row[id] + 1; 

//more code 

$query="INSERT INTO $relations_table (id, pid, oType, position, validSince) 
VALUES ($new_id, 2, 'testtest' , $position , NOW())"; 
+1

你使用什麼數據庫?它不支持某種「自動增量」功能嗎? – jedwards

+0

這是對sobipro組件的入侵。所以,我不能使用自動增量。謝謝 –

+1

'mysql_fetch_assoc'而不是'_array'和引用數組鍵['row ['id']'。**不再使用'mysql_'擴展名代替新代碼,它被_deprecated _。** – Wrikken

回答

4

使用這個代替:

SELECT COALESCE(MAX(id)+1,0) FROM `$object_table` 
+1

只是爲了補充一點:COALESCE用於處理表格中還沒有任何行或者它已被清除的情況(例如)。 –

+0

結合它與拉爾斯的答案中的報價,我們有一個贏家;) – Wrikken

+0

@Wrikken確實,固定。 OP:反引號在這裏適用,不是單引號。 –

1

你應該看看AUTO_INCREMENT - 爲你的id列打開它會在每次插入一行時自動增加1。這樣,插入時就不需要指定id,因爲MySQL會爲您保留跟蹤。

+0

我明白,但表格是組件(sobipro)的一部分。該列是兩列主鍵的一部分。所以添加自動增量不會工作,我認爲。謝謝 –

0

首先,它是$row['id']而不是$row[id]

二,mysql_*已棄用,請勿使用它。請使用PDOmysqli

第三,您可以使用MAX從列中獲取最大值。 SELECT MAX(id) FROM '$object_table' LIMIT 1

而最重要的是,設置id字段爲autoincrement並且不要設置它(MySQL會這樣做)。

1

您可以在插入這樣做:

$query="INSERT INTO $relations_table (id, pid, oType, position, validSince) 
    VALUES ((SELECT MAX(id)+1 FROM $object_table), 2, 'testtest' , $position , NOW())"; 

AUTO_INCREMENT是一個更好的選擇,但是這個時候你不能AUTO_INCREMENT會工作。

0

所以,你要尋找的查詢是:

SELECT MAX(id) FROM table 

但許多數據庫提供了一個「自動增量」功能,在這裏你可以指定一列(在這種情況下id)是主鍵並且它的值自動增加,所以你不必做任何這些。

2
SELECT * FROM `$object_table` 

表名和字段名不',但``(反引號)

而且你應該問的錯誤數據庫...

,你不應該再使用MySQL擴展,但切換到mysqli或PDO ...