comparaison SQL

Mammouth du PHP | 514 Messages

01 févr. 2007, 11:05

Bonjour,

j'ai une requête qui compare deux comptes, dont l'un est converti en entier.

Voici la requête :

Code : Tout sélectionner

SELECT IF (COUNT(R.Archive)/2 = CAST(COUNT(R.Archive)/2 AS SIGNED), 1, 0) AS RESULTAT FROM articles_operations R WHERE R.ArticleId=3
Si le COUNT = COUNT converti en entier, alors afficher 1, sinon afficher 0. (en gras c'est ça la requête).

Mon souci, c'est que cette requête affiche 1 également lorsque les résultats ne sont pas égaux, et je n'arrive pas à saisir mon erreur.

Merci d'avance pour votre aide.

Eléphant du PHP | 136 Messages

05 févr. 2007, 11:28

Essaies en établissant la différence entre R.Archive)/2 moins sa valeur arrondie qui doit être ==0 (ou non)
L'informatique apporte des solutions à des problèmes qui ne se posaient pas avant qu'elle existe.

ViPHP
ViPHP | 1961 Messages

05 févr. 2007, 11:33

Bonjour,

La façon la plus simple c'est de passer par le modulo.

Code : Tout sélectionner

SELECT !MOD(COUNT(Archive), 2) AS resultat FROM articles_operations WHERE ArticleId=3
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

05 févr. 2007, 11:47

J'en profite pour ajouter un point très important quand vous ouvrez un topic sur PHPFrance ou n'importe quel site de support. C'est une bonne chose d'indiquer le fonctionnement de votre algorithme, mais il est aussi important d'indiquer vos motivations. En l'occurence, je me doute que mcorgnet se fiche de savoir si un "nombre converti en entier moins 1 divisé par 2 et je retiens 1" renvoit 0 ou 1, sa motivation est probablement plus proche de "est-ce que ce nombre est pair ou impair ?". Et Ajoloca l'a deviné en proposant directement une meilleure solution à ce problème.

Résultat : pourquoi ça marche pas ? réponse : je sais pas mais on s'en fiche. Comment fait-on pour savoir si un nombre est pair ou impair, utilisé un "modulo". D'ailleurs j'en profite pour proposer d'utiliser l'opérateur % plutôt qu'une fonction, dans la mesure où on retrouve cet opérateur dans la plupart des languages informatiques. De plus, je ne suis pas sûr de l'effet de l'opérateur logique NOT (ou ! dans l'exemple) je pense qu'il faudrait plutôt utiliser une soustraction du nombre 1:

Code : Tout sélectionner

SELECT 1 - (COUNT(*) % 2) AS RESULTAT FROM articles_operations WHERE ArticleId = 3

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

05 févr. 2007, 11:54

Je viens de vérifier dans SQL:2003 mais je n'arrive pas à trouver % comme opérateur de modulo, en revanche MOD() y est donc c'est peut-être la forme à préférer après tout... Si quelqu'un a une information définitive à ce sujet ça m'intéresse merci ;) (dans le doute j'utiliserai MOD())

Mammouth du PHP | 514 Messages

05 févr. 2007, 15:23

Merci de votre aide, le modulo fonctionne effectivement. J'avais cherché cette solution, mais j'ai jamais compris ce qu'était un modulo (et pourtant, on s'evertue à m'expliquer ...).

Voui, je cherchais à obtenir une information de nombre pair ou impair.

Merci encore.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

05 févr. 2007, 16:04

Le modulo c'est facile, t'as déjà fait une division à la main ? le résultat du modulo c'est le reste. En image: 13 % 4 = 1
Image

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

11 févr. 2007, 00:09

Confirmé par le manuel de MySQL, l'opérateur % est une extension, donc MOD() est à préférer.