Resultat retourné par count = 0 alors que c'est faux mysql

Résolu/Fermé
sissiegozz Messages postés 5 Date d'inscription lundi 8 octobre 2012 Statut Membre Dernière intervention 8 novembre 2012 - Modifié par sissiegozz le 7/11/2012 à 14:24
sissiegozz Messages postés 5 Date d'inscription lundi 8 octobre 2012 Statut Membre Dernière intervention 8 novembre 2012 - 8 nov. 2012 à 11:54
Bonjour,

Je voudrais savoir pourquoi cette requête renvoie toujours un count = 0 alors que ce résultat est faux.

SSELECT COUNT( * )
FROM temporaire
WHERE dateReception = (
SELECT ADDTIME( '2012/03/14 00:00:00', '00:01:00' ) )

A voir également:

4 réponses

Utilisateur anonyme
7 nov. 2012 à 15:42
Bonjour

1 - MySQL se trompe nettement moins souvent que les programmeurs. Le résultat est correct, et si ce n'est pas ce que tu attends, c'est dans la question qu'il y a une erreur.

2 - On se demande à quoi sert ton SELECT interne

3 - tu es sûr que c'est bien 1 minute que tu voulais ajouter ? Pas un jour, par hasard ?
SELECT COUNT( * ) 
FROM temporaire 
WHERE dateReception =  ADDTIME( '2012/03/14 00:00:00', '24:00:00' ) 
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
7 nov. 2012 à 17:53
Plutôt d'accord avec le père.

Si tu veux plus de détails, donne nous un exemple de données qui devraient, d'après toi, être comptées par ta requête.

Xavier
0
sissiegozz Messages postés 5 Date d'inscription lundi 8 octobre 2012 Statut Membre Dernière intervention 8 novembre 2012
Modifié par sissiegozz le 8/11/2012 à 06:21
Bonjour, merci de vos réponses et oui, c'est 1 minute que je veux bien ajouter!

Dans ma table 'temporaire', il y plusieurs enregistrements pour la date 2012/03/14 00:00:00 et 2012/03/14 00:01:00 et ainsi de suite!
Je voudrais compter le nombre d'entrée ayant pour date 2012/03/14 00:01:00.

Je sais que je dois procéder comme suit:
SELECT COUNT( * )
FROM temporaire
WHERE dateReception = ('2012/03/14 00:01:00') , et cette requête me renvoie bien le résultat attendu.

Seulement je dois faire la requête suivante:
SELECT COUNT(*) FROM temporaire WHERE dateReception = (SELECT ADDTIME(SELECT dateReception FROM temporaire WHERE id LIKE '%0000000000' , '00:01:00'))

Le problème c'est qu'il me renvoie un count = 0

Donc, si j'ai la solution de: SELECT COUNT( * )
FROM temporaire
WHERE dateReception = (
SELECT ADDTIME( '2012/03/14 00:00:00', '00:01:00' ) ) [le sujet de cette discussion]

je réussirai probablement à résoudre mon problème!
Merci!
0
Utilisateur anonyme
8 nov. 2012 à 09:07
1 - La requête telle que tu la posais dans ta première question fonctionne très bien. J'ai créé une table et je l'ai essayée pour le cas où une erreur m'aurait échappé. Il n'y a pas de problème à ce niveau-là

2 - Comme je te l'ai déjà dit, tu as un niveau de sous-requête inutile. Je ne vois pas la différence (j'ai peut-être tort, je ne suis pas spécialiste mysql) entre
SELECT COUNT( * ) FROM temporaire WHERE dateReception = 
( SELECT ADDTIME( '2012/03/14 00:00:00', '00:01:00' ) ) 
et 
SELECT COUNT( * ) FROM temporaire WHERE dateReception =  
ADDTIME( '2012/03/14 00:00:00', '00:01:00' ) 

3 - Maintenant que tu as donné ta vraie requête, je vois deux problèmes :
- la sous-requête à l'intérieur du ADDTIME (qui n'apparaissait pas avant) devrait être entourée de parenthèses
- Tu vas avoir une erreur si cette sous-requête sort plus d'une ligne de résultat.
Si tu es sûr qu'il y a un id et un seul qui est LIKE '%0000000000', tu peux faire
:
SELECT COUNT(*) FROM temporaire WHERE dateReception = ADDTIME((SELECT dateReception FROM temporaire WHERE id LIKE '%0000000000') , '00:01:00') 

Mais il vaut sûrement mieux utiliser une jointure :
SELECT COUNT(*) FROM temporaire t1 INNER JOIN temporaire t2 ON ADDTIME(t1.dateReception,'00:01:00') = t2.dateReception AND t1.id LIKE '%0000000000'
0
sissiegozz Messages postés 5 Date d'inscription lundi 8 octobre 2012 Statut Membre Dernière intervention 8 novembre 2012
8 nov. 2012 à 11:54
Merci beaucoup pour tes réponses!
Tu as raison, la première requête doit marcher, et elle marche bien maintenant! Un resultat count=0 a été renvoyé parce que je n'ai pas utiliser le type datetime pour mon champ dateReception. C'est mon erreur!

Concernant ma vraie requete, j'ai eu des erreurs de syntaxe. Merci pour les codes SQL que tu m'as filé, elles marchent super bien!
Merci surtout pour l'idée de la jointure, c'est super!

Merci pour ton aide, je vais pouvoir avancer maintenant!
0