Php 尝试使用UNION ALL插入到临时表中
我正在尝试设置一个基本的搜索脚本。建议将当前mysql表中的数据插入临时表,以加快搜索速度 以下是我目前掌握的代码: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`
$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)