2009-05-13 6 views
3

En réponse à une autre question ici sur stackoverflow (How do you select every n-th row from mysql), quelqu'un fourni cette réponse:syntaxe MySQL

SELECT * FROM (SELECT @row := @row +1 AS rownum, [column name] 
FROM (SELECT @row :=0) r, [table name]) ranked WHERE rownum % [n] = 1 

Quelqu'un pourrait-il fournir ou me indiquer plus d'informations sur l'utilisation de la syntaxe ici. Je ne suis pas familier avec l'utilisation de: =?

(je ne suis pas en mesure de demander une explication plus détaillée dans les commentaires en raison de points.)

Merci.

Répondre

2

De http://dev.mysql.com/doc/refman/5.0/en/user-variables.html:

« Pour SET, soit = ​​ou:.. = Peut être utilisé comme l'opérateur d'affectation

Vous pouvez également attribuer une valeur à une variable d'utilisateur dans les déclarations autres que SET Dans ce cas, l'opérateur d'affectation doit être: = et non = parce que = est traité comme un opérateur de comparaison dans les états non-SET:

mysql> SET @t1=0, @t2=0, @t3=0; 
mysql> SELECT @t1:=(@t2:=1)[email protected]:=4,@t1,@t2,@t3; 
+----------------------+------+------+------+ 
| @t1:=(@t2:=1)[email protected]:=4 | @t1 | @t2 | @t3 | 
+----------------------+------+------+------+ 
|     5 | 5 | 1 | 4 | 
+----------------------+------+------+------+ 

"

0

Pour moi, il semble que ce soit exactement la même chose que an =.

2

a = b MySQL compare a-b et retourne true si elles sont égales ou false autrement. @a := b, d'autre part, définit la valeur de @a à b.

Fondamentalement, = est l'opérateur de comparaison ("est égal à"), et := est l'opérateur d'affectation ("set equal to").

EDIT: Je viens de découvrir que vous pouvez utiliser = comme l'opérateur d'affectation dans SET déclarations, car il n'y a pas une telle chose que des comparaisons dans celles-ci. Dans les instructions SELECT, vous devez utiliser := pour l'affectation.

Questions connexes