2013-06-24 24 views
0

我嘗試在SELECT中進行插入,如在SQL SQL Fiddle HERE中看到的。從選擇火災的PHP MySQL插入錯誤

我的代碼:

$sql2 .= "INSERT INTO $tableBackup (Fahrer, Datum, Baustelle, Arbeitsbeginn, Arbeitsende, Projektbeginn, Projektende, Arbeitszeit, Projektzeit, Pausenzeit, Reine AZ, Sonntag, Feiertag, Urlaub, Krank, Stundensatz, Auslöse, Gesamt)"; 
     $sql2 .= "SELECT t.*,"; 
     $sql2 .= "sum(HOUR(TIMEDIFF(STR_TO_DATE(Arbeitsbeginn, '%d.%m.%Y %H:%i:%s'), STR_TO_DATE(Arbeitsende, '%d.%m.%Y %H:%i:%s')))) AS ARBEITSZEIT, sum(HOUR(TIMEDIFF(STR_TO_DATE(Projektbeginn, '%d.%m.%Y %H:%i:%s'), STR_TO_DATE(Projektende, '%d.%m.%Y %H:%i:%s')))) AS Projektzeit"; 
     $sql2 .= "FROM (SELECT DriverName AS Fahrer, Datum,Baustelle,Arbeitsbeginn,Arbeitsende,Projektbeginn,Projektende"; 
     $sql2 .= "FROM (SELECT DRIVERNAME,left(`datetime`, 10) as Datum,,GROUP_CONCAT(IF(ACTIONTEXT = 'PB', AREA, NULL)) AS 'Baustelle',GROUP_CONCAT(IF(ACTIONTEXT = 'Arbeitsbeginn', DATETIME, NULL)) AS 'Arbeitsbeginn',GROUP_CONCAT(IF(ACTIONTEXT = 'Arbeitsende', DATETIME, NULL)) AS 'Arbeitsende',GROUP_CONCAT(IF(ACTIONTEXT = 'PB', DATETIME, NULL)) AS 'Projektbeginn',GROUP_CONCAT(IF(ACTIONTEXT = 'PE', DATETIME, NULL)) AS 'Projektende'"; 
     $sql2 .= "FROM geoImportRoot GROUP BY DRIVERNAME) A CROSS JOIN (SELECT 1 AS n UNION ALL SELECT 2) n) t"; 
     $sql2 .= "GROUP BY Fahrer, Datum;"; 
     $this->DB->Execute($sql2); 

而新表的結構:

`geoEdit` (
`ID` int(255) NOT NULL AUTO_INCREMENT, 
`Fahrer` text NOT NULL, 
`Datum` text NOT NULL, 
`Baustelle` text NOT NULL, 
`Arbeitsbeginn` text NOT NULL, 
`Arbeitsende` text NOT NULL, 
`Projektbeginn` text NOT NULL, 
`Projektende` text NOT NULL, 
`Arbeitszeit` text NOT NULL, 
`Projektzeit` text NOT NULL, 
`Pausenzeit` smallint(10) NOT NULL DEFAULT '1', 
`Reine AZ` int(255) DEFAULT NULL, 
`Sonntag` text, 
`Feiertag` text, 
`Urlaub` text, 
`Krank` text, 
`Stundensatz` int(10) NOT NULL DEFAULT '10', 
`Auslöse` int(255) DEFAULT NULL, 
`Gesamt` int(255) DEFAULT NULL, 
PRIMARY KEY (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

它不工作。在啓動這個腳本之前,我會將數據插入到根表geoImportRoot中。

+0

定義**這是行不通的。**和順便說一句,你正在使用'INSERT'但不插入任何'VALUES' –

+0

@ SebastianRush你知道你可以在sql語句中有多行,不需要連接/醜化你的查詢。還可能修復'$ sql2。=「INSERT'到'$ sql2 =」INSERT「 –

+0

請提供錯誤消息。另外,當串聯字符串時,確保在需要的地方包含空白區域,例如,您在項目和下一行的FROM之間缺少空白。 – Eelke

回答

2

這裏空間創造您的查詢問題,請使用反引號周圍

Pausenzeit, Reine AZ, Sonntag, 
       ^

Pausenzeit, `Reine AZ`, Sonntag, 
+1

+1是否有任何空間問題的原因?我認爲他應該使用雙引號,因爲後面的勾號用於表名和列名。 –

+0

@Vivek空間用於創建別名。如果有人用空格創建column_name,那麼他應該使用反引號將其創建爲單列名稱。我們只能在'mysql'中對table_name和column_name使用反引號,如果我們使用'雙引號'或'單引號',則查詢會給出錯誤。 –

+0

Ohh ..是(Pausenzeit,Reine AZ,Sonntag,)這些是列名我認爲這些是數據值。 :) –