【发布时间】:2012-12-15 14:48:15
【问题描述】:
我正在尝试设置一个基本的搜索脚本。建议将当前 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 服务器版本相对应的手册 在 'INSERT INTO search_20121215094411 ( id, 型号、品牌、年份、
Loc.、`' 在第 14 行
我只能猜测它与非常规的列名(Loc.、Sale Price 等)有关。这些是由以前的程序员设置的,我不能对它们进行任何更改。
【问题讨论】:
-
您使用的是旧的
mysql_query()API 吗?对于较旧的驱动程序,它不支持单个查询调用中的多个语句。必须先执行CREATE TABLE,再单独执行INSERT。
标签: php mysql insert union-all