2012-11-28 102 views
0

可能重複:
Moving a row from one table to another (Insert value list does not match column list)MySQL的插入:: MAX(FIELD)+1 - 如果空

對於我的刀片之一,我有以下幾點:(PDO/MySQL的)

$this->sql = "INSERT INTO tblfixedfares NULL, SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldDay', '1', 'Car') FROM tblfixedfares; 
        INSERT INTO tblfixedfares NULL, SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldNight', '2', 'Car') FROM tblfixedfares;"; 

基本上,這不起作用,因爲它沒有爲FixedFareId插入一個值。

我想要做的是設置FixedFareId以1比最高值固定票價ID更大,如果是空的FixedFareId設置爲1

不知道究竟出了什麼問題的代碼但我可以看到我得到以下響應它不是拿起了FixedFareId什麼:

Error: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1SQL 

INSERT INTO tblfixedfares VALUES (NULL, 'le675', 'le115', '11', '1', 'Car'); 
INSERT INTO tblfixedfares VALUES (NULL, 'le675', 'le115', '22', '2', 'Car'); 

基本上兩個插入發生在一個單一的查詢,如果沒有什麼FixedFareId必須是1數據庫:

所以第一次插入nee DS是:

INSERT INTO tblfixedfares VALUES (NULL, **1**, 'le675', 'le115', '11', '1', 'Car'); 
INSERT INTO tblfixedfares VALUES (NULL, **1**, 'le675', 'le115', '22', '2', 'Car'); 

下一個插入將是:

INSERT INTO tblfixedfares VALUES (NULL, **2**, 'le675', 'le115', '11', '1', 'Car'); 
INSERT INTO tblfixedfares VALUES (NULL, **2**, 'le675', 'le115', '22', '2', 'Car'); 

數據庫如下:

ID,FixedFareId,ShortPostcodeA,ShortPostcodeB,車費,DayHalf,VehicleSystemId

id是自動增量,如果爲null,則fixedfareid需要爲1,如果不爲null,則fixedfareid的最大值爲+1。

+0

你能發表該查詢的結果,'DESC tblfixedfares'嗎? –

回答

1

改變你的查詢是這樣的:

  INSERT INTO tblfixedfares (SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldDay', '1', 'Car' FROM tblfixedfares); 
+0

我試過這個,它仍然不起作用。它不是選擇FixedFareId的MAX值,這就是爲什麼計數不正確 – nsilva

+0

不確定你的意思 – nsilva

+0

當你想處理表事件如更新,插入或刪除時使用觸發器(http://dev.mysql.com /doc/refman/5.0/en/create-trigger.html),所以你可以添加一個post/pre數據處理 – Anas

0

也許你正在尋找:

INSERT INTO tblfixedfares SELECT NULL, COALESCE(MAX(FixedFareId),0) + 1, etc.. 

因此,如果FixedFareId的MAX是NULL,它被視爲零,隨後 '1'被添加到它,如果該字段爲空,則結果爲'1'。 (由於MAX(NULL)產生'NULL')。