0

我正在尝试设置一个基本的搜索脚本。建议将当前 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 服务器版本相对应的手册,以Loc.在第 14 行的 'INSERT INTO search_20121215094411 ( id, Model, Make, Year, , ''附近使用正确的语法

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

4

4 回答 4

0

我相信您的“INSERT INTO $temp”行没有插入 $temp 的内容,而是实际上使用 $temp 作为表名。尝试这样的事情:

$sql="INSERT INTO ".$temp." (....

于 2012-12-15T17:29:13.720 回答
0

你有一个额外的)

 $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')
    )
";
于 2012-12-15T14:49:53.170 回答
0

您在 sql 的 create 部分的括号之后或插入之前缺少一个分号。

于 2012-12-15T14:52:30.503 回答
0

使用“union”插入临时表时,应为表“union”创建别名

insert into temp_table (select * from (select * from table_a union select * from table_b) as table_alias)
于 2016-10-21T18:52:29.290 回答