@
tegn er en variabel i SQL.
I MySQL bruges det til at gemme en værdi mellem på hinanden følgende kørsler af en forespørgsel eller til at overføre data mellem to forskellige forespørgsler.
Et eksempel
Overfør data mellem to forespørgsler
SELECT @biggest:= MAX(field1) FROM atable;
SELECT * FROM bigger_table WHERE field1 > @biggest;
En anden anvendelse er i ranking, som MySQL ikke har indbygget understøttelse for.
Gem en værdi for på hinanden følgende kørsler af en forespørgsel
INSERT INTO table2
SELECT @rank := @rank + 1, table1.* FROM table1
JOIN( SELECT @rank := 0 ) AS init
ORDER BY number_of_users DESC
Bemærk, at for at dette kan fungere, skal rækkefølgen, som rækkerne behandles i i forespørgslen, rettes, det er nemt at tage fejl.
Se:
http://dev.mysql .com/doc/refman/5.0/en/user-variables.html
mysql sorterings- og rangeringserklæring
http:// www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/
OPDATERING
Denne kode vil aldrig fungere.
Du har lige åbnet forbindelsen før, og @felterne er ingen steder sat.
Så i øjeblikket holder de null
værdier.
Over det kan du ikke bruge @vars til at angive feltnavne , kan du kun brug @vars til værdier.
$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)";