1

yop,

J'ai un problème assez curieux avec la fonction ABS de MySQL (5.0.45, sous Windows), peut-être que l'erreur est juste sous mon nez mais en attendant je ne comprends pas. J'ai une table "grid" qui possède deux champs "x" et "y", et qui contient des enregistrements pour chaque couple (x, y) tels que 0 <= x <= 99 et 0 <= y <= 99.

Voilà une requête qui me semblait assez simple et son résultat :
SELECT MAX(x) as max_x, MIN(x) as min_x, MAX(y) as max_y, MIN(y) as min_y FROM `grid` WHERE ABS(x - 50) <= 8 AND ABS(y - 50) <= 8
max_x 	min_x 	max_y 	min_y
58 	50 	58 	50

Pourquoi je n'ai pas 42 en min_x et min_y ? D'autant plus qu'en inversant l'expression dans les ABS, ce qui ne devrait donc rien changer au résultat, j'ai :
SELECT MAX(x) as max_x, MIN(x) as min_x, MAX(y) as max_y, MIN(y) as min_y FROM `grid` WHERE ABS(50 - x) <= 8 AND ABS(50 - y) <= 8
max_x 	min_x 	max_y 	min_y
50 	42 	50 	42

J'ai zappé un détail ou il se passe quelque chose de louche ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2

bon j'ai trouvé, x et y étaient non signés et MySQL ne cast pas automatiquement, donc "50 - x" ne peut pas donner un résultat négatif quand x > 50 si x est unsigned
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)