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 構文にエラーがあります。14 行目の 'INSERT INTO search_20121215094411 ( id, Model, Make, Year, Loc., `'付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください

型にはまらない列名 (Loc.、Sale Price など) と関係があるとしか思えません。これらは以前のプログラマーによって設定されたものであり、私が変更することはできません。

4

4 に答える 4

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 の作成部分のかっこの後、または挿入の直前にセミコロンがありません。

于 2012-12-15T14:52:30.503 に答える
0

「INSERT INTO $temp」行は $temp の内容を挿入しているのではなく、実際にテーブル名として $temp を使用していると思います。次のようなことを試してください:

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

于 2012-12-15T17:29:13.720 に答える
0

「ユニオン」で一時テーブルに挿入する場合、テーブル「ユニオン」のエイリアスを作成する必要があります

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