IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

Création d'un requête qui get les datas des champs dont une colonne est dans un intervalle de temps


Sujet :

MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2017
    Messages : 53
    Points : 26
    Points
    26
    Par défaut Création d'un requête qui get les datas des champs dont une colonne est dans un intervalle de temps
    Slt, est-ce que vous pourrais m'aider ? J'ai cette requête sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT order_id, TIMEDIFF('2018-06-29 15:14:00', beg_date[DATETIME]) as diff
    FROM orders 
    WHERE (diff BETWEEN '00:00:00' AND '01:00:00') OR (diff BETWEEN "-01:00:00" AND "00:00:00")
    Je ne sais pas d'où vient l'erreur qui est je pense syntaxique mais dont je ne trouve pas l'origine.
    De plus j'ai une erreur avec l'utilisation de between et du champ diff alors que c'est la solution la plus propre que j'ai trouvé.
    Mon but est de savoir si une course a lieu avec moins d'une heure d'intervalle avec une autre course.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Il n'y a pas de message retourné par MySQL ?

    Sur la ligne WHERE (diff BETWEEN '00:00:00' AND '01:00:00') OR (diff BETWEEN "-01:00:00" AND "00:00:00"), les chaines de caractères doivent être encadrées d'apostrophes et non de guillemets. Les parenthèses sont par ailleurs superflues.
    Cette même ligne peut se simplifier ainsi : WHERE diff BETWEEN '-01:00:00' AND '01:00:00'.

    Quel est le type de l'expression calculée avec TIMEDIFF ? Il faudrait convertir les chaines '-01:00:00' et '01:00:00' dans ce même type pour effectuer la comparaison.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2017
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Quel est le type de l'expression calculée avec TIMEDIFF ? Il faudrait convertir les chaines '-01:00:00' et '01:00:00' dans ce même type pour effectuer la comparaison.
    TIMEDIFF retourne un Time qui correspond à la différence entre deux Time ou deux DATETIME. Je vais tester ta requête.

    Voici l'expression final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	$q = $db->query("SELECT order_id, TIMEDIFF('".$_SESSION['devis']['beg_date']."', beg_date) AS diff
    		FROM orders 
    		WHERE diff BETWEEN '-01:00:00' AND '01:00:00'");
    J'obtiens cette erreur :
    SQLSTATE[42S22]: Column not found: 1054 Champ 'diff' inconnu dans where clause

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2017
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Voici ce que j'obtiens quand j'exécute cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT order_id, TIMEDIFF('2018-06-29 15:12:00', beg_date) AS `diff`
    		FROM orders
    Nom : order_diff.PNG
Affichages : 134
Taille : 6,9 Ko

    Mais dès que j'éxecute celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT order_id, TIMEDIFF('2018-06-29 15:12:00', beg_date) AS `diff`
    		FROM orders
            WHERE 'diff' BETWEEN '-01:00:00' AND '01:00:00'
    Je n'obtiens rien alors que les valeurs de diff sont bien entre '-01:00:00' et '01:00:00'.
    Quelqu'un pourrait-il m'aideR?

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Vous ne pouvez pas utiliser l'alias diff dans la clause WHERE directement.
    Vous pouvez passer par une sous-requête ou utiliser le calcul dans la clause WHERE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT order_id, TIMEDIFF('2018-06-29 15:12:00', beg_date) as diff
      FROM orders 
     WHERE TIMEDIFF('2018-06-29 15:12:00', beg_date) BETWEEN '-01:00:00' AND '01:00:00'

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2017
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2017
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    D'accord je vais faire ça

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Citation Envoyé par wildshadow956 Voir le message
    (...)...WHERE 'diff' BETWEEN '-01:00:00' AND '01:00:00'(...)
    Ici tu testes si la chaine 'diff' se place entre les chaines '-01:00:00' et '01:00:00' dans l'ordre alphabétique.
    Et c'est certain, la condition n'est pas vérifiée...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut à tous.

    Vous êtes dans le forum MySql. Si cela ne concerne pas MySql, ne tenez pas compte de ce qui suit.

    La solution proposée par a11_24 ne fonctionne pas car des dates négatives n'existent pas sous mysql.

    Citation Envoyé par wildshadow956
    Je ne sais pas d'où vient l'erreur qui est je pense syntaxique mais dont je ne trouve pas l'origine.
    Vous n'utilisez pas la bonne fonction pour calculer la différence à + ou - 1 heure autour de votre date pivot.

    Voici ce qu je propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    --------------
    set @pivot = '2018-06-29 15:00:00'
    --------------
     
    --------------
    select  id, time_to_sec(timediff(periode, @pivot)) as diff
    from  (  select 1 as id, cast('2018-06-29 16:25:00' as datetime) as periode union
             select 2 as id, cast('2018-06-29 15:14:00' as datetime) as periode union
             select 3 as id, cast('2018-06-29 14:50:00' as datetime) as periode union
             select 4 as id, cast('2018-06-29 13:33:00' as datetime) as periode union
             select 5 as id, cast('2018-06-29 13:17:00' as datetime) as periode
          ) as x
    having diff between -3600 and +3600
    --------------
     
    +----+------+
    | id | diff |
    +----+------+
    |  2 |  840 |
    |  3 | -600 |
    +----+------+
     
    Appuyez sur une touche pour continuer...
    1 heure, c'est 3600 secondes !

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. Requête SQL pour obtenir les intitulés des champs d'une table
    Par Zakapatul dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2008, 09h51
  2. création de table avec espace pour les noms des champs
    Par comcom94 dans le forum Débuter
    Réponses: 4
    Dernier message: 12/11/2008, 15h51
  3. masqué la barre qui contient les nom des champs dans dbgrid
    Par kroma23 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/09/2008, 12h57
  4. paramétrer les modifications des champs d'une requête
    Par Gary_Stoupy dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 24/01/2007, 14h19
  5. Recuperer les titres des champs d'une requête
    Par Menontona dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 17/01/2007, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo