@
signはSQLの変数です。
MySQLでは、クエリの連続実行間で値を格納したり、2つの異なるクエリ間でデータを転送したりするために使用されます。
例
2つのクエリ間でデータを転送する
SELECT @biggest:= MAX(field1) FROM atable;
SELECT * FROM bigger_table WHERE field1 > @biggest;
もう1つの使用法は、MySQLがネイティブでサポートしていないランキングです。
クエリの連続実行の値を保存する
INSERT INTO table2
SELECT @rank := @rank + 1, table1.* FROM table1
JOIN( SELECT @rank := 0 ) AS init
ORDER BY number_of_users DESC
これが機能するためには、クエリで行が処理される順序を修正する必要があることに注意してください。これは簡単に間違えられます。
参照:
http://dev.mysql .com / doc / refman / 5.0 / en / user-variables.html
mysqlの並べ替えとランキングのステートメント
http:// www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/
更新
このコードは機能しません。
以前に接続を開いたばかりで、@fieldsが設定されていません。
現在、null
を保持しています。 値。
その上、@varsを使用してフィールド名を示すことはできません 、のみ 値には@varsを使用します。
$sql1 = "
LOAD DATA LOCAL INFILE 'import.csv'
REPLACE INTO TABLE tablename
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'
IGNORE 1 LINES
(`normalField`, @field1, @field2, `normalField2`, @field3, @field4)";