Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试使用UNION ALL插入到临时表中_Php_Mysql_Insert_Union All - Fatal编程技术网

Php 尝试使用UNION ALL插入到临时表中

Php 尝试使用UNION ALL插入到临时表中,php,mysql,insert,union-all,Php,Mysql,Insert,Union All,我正在尝试设置一个基本的搜索脚本。建议将当前mysql表中的数据插入临时表,以加快搜索速度 以下是我目前掌握的代码: $temp = 'search_' . date('YmdHis'); // name your temp table $sql = "CREATE TEMPORARY TABLE IF NOT EXISTS {$temp} ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `Model`

我正在尝试设置一个基本的搜索脚本。建议将当前mysql表中的数据插入临时表,以加快搜索速度

以下是我目前掌握的代码:

$temp = 'search_' . date('YmdHis'); // name your temp table

$sql = "CREATE TEMPORARY TABLE IF NOT EXISTS {$temp} (
      `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
      `Model` varchar(255) default NULL,
      `Make` varchar(255) default NULL,
      `Year` varchar(255) default NULL,
      `Loc.` varchar(255) default NULL,
      `Sale Price` varchar(255) default NULL,
      `Serial No.` varchar(255) default NULL,
      `Stock No.` varchar(255) default NULL,
      `Tag No.` varchar(255) default NULL,
      `Comments` varchar(255) default NULL,
      `Description` varchar(255) default NULL,
      FULLTEXT KEY `Model` (`Model`,`Make`,`Year`,`Loc.`,`Sale Price`,`Serial No.`,`Stock No.`,`Tag No.`,`Comments`,`Description`)
     )";

$sql .= "INSERT INTO $temp (
        id,
        Model,
        Make,
        Year,
        `Loc.`,
        `Sale Price`,
        `Serial No.`,
        `Tag No.`,
        Comments,
        Description
        )

        (
        (SELECT null,`Model`,`Make`,`Year`,`Loc.`,`Sale Price`,`Serial No.`,`Stock No.`,`Tag No.`,`Comments`,`Description` FROM ag_auger_and_grain_handling WHERE Status='IN' or Status='OF'
            UNION ALL
        SELECT null,`Model`,`Make`,`Year`,`Loc.`,`Sale Price`,`Serial No.`,`Stock No.`,`Tag No.`,`Comments`,`Description` FROM ag_combine WHERE Status='IN' or Status='OF'
            UNION
        SELECT null,`Model`,`Make`,`Year`,`Loc.`,`Sale Price`,`Serial No.`,`Stock No.`,`Tag No.`,`Comments`,`Description` FROM ag_tractor WHERE Status='IN' or Status='OF')
        )
    )";

?>
以下是我收到的错误:

无法执行查询,因为:SQL语法中有错误; 检查与MySQL服务器版本对应的手册,了解 使用“插入到搜索中”的正确语法\u 201215094411(id, 型号,品牌,年份,
Loc.
,`14行

我只能猜测它与非传统的列名(Loc、Sale Price等)有关。这些列名是由以前的程序员设置的,我不能对它们进行任何更改。

您有一个额外的


在sql的create部分的括号后面或插入之前缺少分号

我相信您的“INSERT INTO$temp”行不是插入$temp的内容,而是使用$temp作为表名。试着这样做:


$sql=“插入到“$temp.”(..

当插入到带有“union”的临时表中时,您应该为表“union”创建别名


您使用的是旧的
mysql\u查询()吗
API?对于较旧的驱动程序,它不支持在一个查询调用中使用多个语句。您必须首先执行
CREATE TABLE
,然后分别执行
INSERT
。不,表名是
search
,表标识符在MySQL中不是单引号。现在您完全缺少表名。一个列列表属于
()
。是的,并且在
插入到tablename(col1,col2,col3)值(1,2,3)
语法中仍然缺少表名。表名不应是
()
included.否-表名
'$temp'
周围仍有单引号,MySQL将其解释为字符串文字。OP的问题是试图在一次调用中执行两条语句,这是不受支持的。这不是语法错误。是的,但仍然是错误的,仍然没有帮助。没有
值de>中的关键字
 $sql .= "INSERT INTO $temp (
    id,
    Model,
    Make,
    Year,
    `Loc.`,
    `Sale Price`,
    `Serial No.`,
    `Tag No.`,
    Comments,
    Description
    )

    (
    (SELECT null,`Model`,`Make`,`Year`,`Loc.`,`Sale Price`,`Serial No.`,`Stock No.`,`Tag No.`,`Comments`,`Description` FROM ag_auger_and_grain_handling WHERE Status='IN' or Status='OF'
        UNION ALL
    SELECT null,`Model`,`Make`,`Year`,`Loc.`,`Sale Price`,`Serial No.`,`Stock No.`,`Tag No.`,`Comments`,`Description` FROM ag_combine WHERE Status='IN' or Status='OF'
        UNION
    SELECT null,`Model`,`Make`,`Year`,`Loc.`,`Sale Price`,`Serial No.`,`Stock No.`,`Tag No.`,`Comments`,`Description` FROM ag_tractor WHERE Status='IN' or Status='OF')
    )
";
insert into temp_table (select * from (select * from table_a union select * from table_b) as table_alias)