2009-05-13 15 views
3

Als Antwort auf eine andere Frage hier auf Stackoverflow (How do you select every n-th row from mysql), jemand versorgt diese Antwort:mysql Syntax

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

Könnte jemand bieten oder mich über die Syntax Nutzung hier, um weitere Informationen zu verweisen. Ich bin nicht vertraut mit der Verwendung von: =?

(Ich bin für eine weitere Erklärung zu bitten, in den Kommentaren aufgrund Punkte. Nicht in der Lage)

Dank.

Antwort

2

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

„Für SET, entweder = oder:.. = Als Zuweisungsoperator verwendet werden

Sie auch einen Wert einer Benutzervariablen in Aussagen außer SET In diesem zuweisen = und nicht = da = als Vergleichsoperator in nicht-SET-Anweisungen behandelt: Fall muss der Zuweisungsoperator sein

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

Für mich sieht es aus wie es ist genau das gleiche wie ein =.

2

a = b in MySQL vergleicht a-b und gibt true wenn sie sind gleich oder false anders. @a := b, auf der anderen Seite setzt den Wert von @a zu b.

Grundsätzlich ist = der Vergleichsoperator ("ist gleich") und := ist der Zuweisungsoperator ("gleich gesetzt").

EDIT: Ich habe gerade herausgefunden, dass Sie = als Zuweisungsoperator in SET Anweisungen verwenden können, da es nicht so etwas wie Vergleiche in denen ist. In SELECT Anweisungen müssen Sie := für die Zuweisung verwenden.