【问题标题】:php mysql insert from select fires error从选择中插入的php mysql会触发错误
【发布时间】:2013-06-24 05:21:36
【问题描述】:

我尝试从 SQL Fiddle HERE 中看到的 SELECT 在 PHP 中进行插入。

我的代码:

$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 中。

【问题讨论】:

  • 定义 它不起作用。 顺便说一句,您正在使用 INSERT 但未插入任何 VALUES
  • @SebastianRush 你知道你可以在一个 sql 语句中有多行,没有必要连接/丑化你的查询。也可能将$sql2 .= "INSERT 修复为$sql2 = "INSERT
  • 请提供错误信息。此外,在连接字符串时,请确保在需要的地方包含空格,例如,您在 projektende 和下一行的 FROM 之间缺少空格。

标签: php mysql select insert


【解决方案1】:

此处的空格会在您的查询中产生问题,请在其周围使用反引号

 Pausenzeit, Reine AZ, Sonntag,
                  ^

 Pausenzeit, `Reine AZ`, Sonntag,

【讨论】:

  • +1 空间问题有什么原因吗?我认为他应该使用双引号,因为反引号用于表名和列名。
  • @Vivek 空间用于创建别名。如果有人用空格创建 column_name,那么他应该使用反引号将其创建为单个列名。 mysql中的table_name和column_name只能使用反引号,如果使用double quotesingle quote查询会报错。
  • 哦.. 是的 (Pausenzeit, Reine AZ, Sonntag,) 这些是列名,我认为这些是数据值。 :)
猜你喜欢
  • 2017-08-22
  • 2019-01-02
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
相关资源
最近更新 更多