2009-04-17 5 views

Répondre

3

Comme la plupart des langages de programmation, MySQL effectue / et * (ainsi que DIV,% et MOD) de gauche à droite, dans l'ordre où ils se produisent. Par exemple:

1/2 * 3/4/5 * 6 

est équivalent à

((((1/2) * 3)/4)/5) * 6 

Voir http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html pour une liste complète de priorité des opérateurs.

+0

Est-ce que le downvoter peut expliquer son raisonnement? – Artelius

0

/ou * aura la plus haute priorité dans mysql.

Ils sont de même priorité.

1

Ils ont la même précédence, * est listé en premier, et MySQL évaluera de gauche à droite.

http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

Mon conseil est d'usage entre parenthèses() pour rendre les choses claires.

Il est toujours préférable de vérifier, et qui peut être fait très facilement avec MySQL:

mysql> SELECT 2*3/2, 2/3*2, 2*(3/2) ; 
+--------+--------+---------+ 
| 2*3/2 | 2/3*2 | 2*(3/2) | 
+--------+--------+---------+ 
| 3.0000 | 1.3333 | 3.0000 | 
+--------+--------+---------+ 
1 row in set (0.00 sec) 
2

Les opérateurs sont hiérarchisées comme la liste de la plus haute priorité au plus bas:

  1. BINARY, COLLATE
  2. NOT (négation logique),! (Négation logique)
  3. .- (moins unaire), ~ (unaire inversion de bits)
  4. ^(OU exclusif comparaison au niveau du bit)
  5. . * (Multiplication),/(division),% (modulo)
  6. .- (soustraction), + (addition)
  7. < < (décalage de gauche au niveau du bit), >> (décalage droit au niveau du bit)
  8. & (bitwise ET)
  9. | (Opérateur OR)
  10. opérateurs de comparaison tels que <>
  11. ENTRE, PAS ENTRE
  12. ET & & (conjuction - plus logique)
  13. XOR (logique OU exclusif comparaison)
  14. OU || (Disjonction - soit/ou comparaison)

Comme par liste, la comparaison opérateur BINARY a priorité sur la BETWEEN et les opérateurs de esperluette (&).Les opérateurs sur la même ligne ci-dessus ont le même niveau de priorité et sont évalués dans l'ordre d'utilisation.

Source http://www.learn-mysql-tutorial.com/Expressions.cfm

+1

Je supprimerais cela rapidement, ChrisAD. Je pense que c'est faux. – paxdiablo

+0

oui c'était faux Pax =) Dans MySQL son évalué dans l'ordre d'utilisation quand ils sont au même niveau. Je lisais sur Transact-SQL ici: http://msdn.microsoft.com/en-us/library/ms190276.aspx ce qui n'est pas la même chose pour MySQL =) Merci PAx –

0

La réponse est: il ne devrait pas d'importance. Si vous avez une expression indiquant que vous n'êtes pas sûr de l'évaluation, utilisez parens. Ils sont gratuits.

Questions connexes