2013-05-06 20 views
1

我創建一個PHP腳本插入到一個數據庫命令的基礎上,使用會話數組存儲在關聯數組的訂單數據庫$ _SESSION ['大車']。該數據庫看起來是這樣的:選擇(最大)不會超過10 - mysql與phpmyadmin

orders 
----------+--------------+-------------+-------------+-------------+ 
    Id  | Username | Item1Id | Item2Id | Item3Id | 
----------+--------------+-------------+-------------+-------------+ 
1   | [email protected]  | 8000001 | 8000002 | 800003 | 
----------+--------------+-------------+-------------+-------------+ 
5   | [email protected]  | 7000001 | 6000002 | 700003 | 
----------+--------------+-------------+-------------+-------------+ 
7   | [email protected]  | 8000001 | 8000002 | NULL  | 
----------+--------------+-------------+-------------+-------------+ 
10  | [email protected]  | 3000001 | 1000002 | 800009 | 
----------+--------------+-------------+-------------+-------------+ 

ID列類型是CHAR(20),我可以選擇以後使用字母。

作爲插入行的一部分,我需要爲訂單行分配一個Id(主鍵),該行將被設置爲1,高於發現的當前最高Id號。

整個腳本完美地工作;查詢查找表中的最高Id,然後將其遞增1並將其分配給一個變量以用作插入查詢的一部分。唯一的問題是,「SELECT MAX(Id)FROM orders」似乎找不到高於9的任何內容。有沒有一種情況可以防止SELECT MAX(Id)識別兩位數字的內容?

我知道了這樣寫:

$highestID = mysqli_query($conn, "SELECT MAX(Id) FROM orders"); 

$orderID = $highestID +1; 

我已經清空數據庫,除了標識numbers1和2運行PHP腳本插入除非它與ID號3,4,5新行得到10,腳本無法產生,因爲它產生重複的主鍵'10'(從$ orderID的值)的錯誤。即使用Id'25'手動輸入數據庫行,$ orderID仍然只會在返回結果時返回'10'。

我還沒有設置任何具體的限制,可以輸入的行或類似的東西。

+0

使用'cast' - '選擇orders'最大(投(編號爲無符號))。 – Jack 2013-05-07 23:45:15

回答

-1

你真的不需要爲自動增量PK經歷所有這些麻煩。這是你如何去做的。

第1步:在你的phpmyadmin中,編輯你的表格,並檢查你的PK欄的A_I複選框。

第2步:從PHP插入時,將該字段留空。它會自動爲你的PK分配一個current max + 1的值。

例如,

$query = "Insert into mytable (id, name) values ('', 'Name1'), ('', 'Name2')"; 

編輯:你真的不能有一個CHAR(20) PK,然後期望的增量BTW工作。

+0

這有很大的幫助,但在理論上,通過PHP腳本增加我自己的方式應該提供相同的功能不應該嗎?另外,我怎麼能確定A_I將爲目前存在的最高訂單號碼工作? – klex 2013-05-06 03:25:26

+0

您必須編寫的額外代碼仍然是不必要的。 A_I自動拾取整數的最大值。編輯我的答案以回答您的第一個查詢。 – Achrome 2013-05-06 03:29:00

+0

謝謝。我會去那。 – klex 2013-05-06 03:36:04

0

Idchar(20)所以order by Id使用字符串排序。您可以使用castconvert函數對數字進行排序。

像:在查詢 select max(cast(Id as unsigned)) from orders