0

私の目的は、単語の関連性でソートする選択クエリを最適化することです。

データベース全体を 2 回検索する代わりに、ここでこのクエリを作成しました。

$query = "SELECT * INTO #TEMP_TABLE " .
                     "FROM cron_video ".
                     "where id LIKE '%" . $searchString . "%' " .
                     "union all " .
                     "SELECT * " .
                     "FROM #TEMP_TABLE ".
                     "WHERE id LIKE '". $searchString . "%' " ;     

しかし、それは次のようにエラーを出しています

SQL エラー 1: SQL 構文にエラーがあります。1 行目の near '' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

4

2 に答える 2

1

クエリを実行する前に CREATE TEMPORARY TABLE を使用します (ニーズに合った構造を定義します)。

また、一貫性を保つために、テーブルには a-zA-Z_- のみを使用して名前を付けてください。

http://dev.mysql.com/doc/refman/5.1/en/create-table.html

また、ライン フィードを含むクエリ全体を MySQL に提供してください。将来のデバッグが容易になります。つまり、「1 行目のエラー」ではなく、「6 行目のエラー」です (常にmysql に 1 行入力します。

于 2013-03-20T10:03:59.640 に答える
0

実行時に作成される一時的なテーブル...だから書く

CREATE TEMPORARY TABLE...構文と INSERT INTOその結果...

からMySQL manual

テーブルの作成時に TEMPORARY キーワードを使用できます。TEMPORARY テーブルは現在の接続に対してのみ表示され、接続が閉じられると自動的に削除されます。これは、2 つの異なる

たとえば。

CREATE TEMPORARY TABLE tmp_film (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50),
`last_updated_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(`id`)
)ENGINE=HEAP DEFAULT CHARSET=latin1;

INSERT INTO tmp_film(`name`) VALUES ('Keshav');

SELECT * FROM tmp_film;
于 2013-03-20T10:04:51.060 に答える