Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/06/2011, 11h53   #1
Invité régulier
 
Inscription : janvier 2011
Messages : 54
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 54
Points : 6
Points : 6
Par défaut Requête comparaison de dates MySQL

Bonjour,

Je vous explique mon souci:
Je voudrais sélectionner le nom des utilisateurs qui n'ont pas fait d'action depuis 2 heures par rapport au moment où je lance le script.
Voici mon code:
Code :
1
2
3
select user_name
from users
where last_action < SUBDATE (CURRENT_TIMESTAMP, INTERVAL 2 HOUR)
Le champ last_action est de type datetime.
Il me retourne l'erreur suivante:
Citation:
Incorrect syntax near '2'.
J'ai lu la doc mais apparemment, c'est la bonne méthode...

Merci pour votre aide
fra7878 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 13h40   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
SAluton,
Essaye en enlevant l'espace entre SUBDATE et la parenthèse (
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 13h49   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 954
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 954
Points : 17 774
Points : 17 774
Citation:
Envoyé par fra7878 Voir le message
Bonjour,

Code :
1
2
3
select user_name
from users
where last_action < SUBDATE (CURRENT_TIMESTAMP, INTERVAL 2 HOUR)
J'ai lu la doc mais apparemment, c'est la bonne méthode...

Merci pour votre aide
1) vous avez mal lu la doc
2) même la syntaxe normative ne passe pas sous MySQL sous ce SGBDR queque peu bricolé....

Syntaxe normative :

Code :
1
2
3
SELECT user_name
FROM users
WHERE last_action < SUBDATE (CURRENT_TIMESTAMP, INTERVAL '2 HOUR')
Syntaxe spécifique à MySQL :
Code :
1
2
3
SELECT user_name
FROM users
WHERE last_action < SUBDATE (CURRENT_TIMESTAMP, 'INTERVAL 2 HOUR')
A lire sur les incohérences et autres à peu près de MySQL :
http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/

Et pour apprendre SQL, mon livre, comme mon site web peuvent vous y aider !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 14h51   #4
Invité régulier
 
Inscription : janvier 2011
Messages : 54
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 54
Points : 6
Points : 6
Avant tout merci pour vos réponses

@ Maljuna Kris: l'espace ne change rien.

@ SQLpro: J'ai utilisé les deux syntaxes sans succès:
Pour la normative: Incorrect syntax near '2 HOUR'.
Pour la spécifique: 'SUBDATE' is not a recognized built-in function name.

Encore merci pour vos posts
fra7878 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 15h59   #5
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 851
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 851
Points : 1 329
Points : 1 329
salut,

tu as mal lu: subdate est dédié à calculer une différence de jours (unité: day)

tu dois juste changer subdate en subtime et ça devrait marcher
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 16h40   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 005
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 005
Points : 18 275
Points : 18 275
Envoyer un message via MSN à CinePhil
Essaye avec DATE_SUB :
Code :
DATE_SUB(date,INTERVAL expr type)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 09h07   #7
Invité régulier
 
Inscription : janvier 2011
Messages : 54
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 54
Points : 6
Points : 6
Merci pour vos réponses mais j'obtiens toujours la même erreur aussi bien avec SUBTIME qu'avec DATE_SUB...

Quelqu'un pourrait tester cette requête?

Encore merci
fra7878 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 12h40   #8
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 851
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 851
Points : 1 329
Points : 1 329
j'ai testé alors il faut bien pas d'espace entre subdate et '('

par contre si tu as toujours une erreur vérifie que le type de CURRENT_TIMESTAMP est bien date, time, datetime ou une chaine de caractère formatée comme un des 3 types précités...
car ça marche ça:
Code sql :
SELECT SUBDATE('2011-03-11', INTERVAL 2 HOUR);
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h59.


 
 
 
 
Partenaires

Hébergement Web