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

Requêtes MySQL Discussion :

Requetes sql sur DATE (selection d'une période)


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Requetes sql sur DATE (selection d'une période)
    Bonjour à tous,

    Voila je but sur une requete SQL un peu compliqué pour ma part qui debute totalement !

    Je cherche a selectioner dans une table des commandes non validée qui ont été passé depuis sept jours par ex. (donc d'aujourd'hui - 7 jours).

    mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql2 = "SELECT id_order FROM orders WHERE TO_DAYS(NOW()) - TO_DAYS(date_add) <=7 AND valid='0' ";
    $result2 = mysql_query($sql2) or die('error');
    J'avais l'impression que cetait le bon code mais je me suis rendu compte que si j'alongeai la periode sur 60 jours, il me trouvais un resultat erroné.

    Peut être avez vous une autre solution a me proposé concernant la gestion des dates ?

    Ensuite ca ce complique encore

    Dans cette requette sql, je selectionne donc l'id des commande pas validée depuis sept jours.

    Cette liste d'id je voudrais l'utilisé pour qu'il me sorte le statut des commandes qui se trouve dans une autre table, ca à l'air de marché mais je voulais avoir votre avis sur ce code :

    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
    24
     
    <table>
     
    <?php
    // ma requette pour les commande de sept jours
    $sql2 = "SELECT id_order FROM ps_orders WHERE TO_DAYS(NOW()) - TO_DAYS(date_add) <=60 AND valid='0' AND module='cheque' ";
    $result2 = mysql_query($sql2) or die('error');
     
     
    while ($listOrderByCheque = mysql_fetch_array($result2)) {          
     
     
    $sql3 = "SELECT id_order FROM order_history WHERE id_order = ('" .$listOrderByCheque['id_order']. "') AND id_order_state = '11' ";
     
                $result3 = mysql_query($sql3) or die('error');
     
    	while ($test = mysql_fetch_array($result3)) { ?>
     
    <tr style="background-color:#FF0000;"><td><?php echo $test['id_order'] ;?></td></tr>
    <?php		
    	}
    		}
    ?>
    </table>
    Je fais un while dans un while, je ne sais pas si c'est conseillé.

    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Essayez déjà de laisser seule dans la clause WHERE votre expression sur la colonne date_add, de cette manière si vous avez des problèmes de performances, vous pourrez par exemple indexer TO_DAYS(date_add) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id_order 
    FROM orders 
    WHERE TO_DAYS(date_add) >= TO_DAYS(NOW()) - 60 
    AND valid='0'
    Si cette requête vous renvoie parfois des resultats erronés, expliquez nous lesquels.

    Ensuite, pour avoir le statut des commandes associées, une simple requete devrait suffire.
    Décrivez nous vos tables, parce que j'ai l'impression que la table orders de votre première requete devient ps_orders dans la seconde, et je me demande un peu d'ou sort le id_order_state = 11, ça n'est pas très clair.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    A noter que date_add est une fonction MySQL alors ça peut poser problème d'appeler une colonne de ce nom. Au minimum, prenez soin d'entourer cette colonne avec des apostrophes inversées (AltGr + 7 sur un clavier fançais) afin d'éviter toute confusion.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Pour ce type de problème je préfère faire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE date_a_test < SUBDATE(NOW(), INTERVAL 60 DAY)
    Tu peux tester directement et jouer avec le nombre de jour comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select SUBDATE(NOW(), INTERVAL 60 DAY) from dual;

Discussions similaires

  1. [MySQL] requete SQL sur une partie d'un date
    Par stefano dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/09/2012, 13h40
  2. Requete SQL sur une date
    Par le_misterioso dans le forum Persistance des données
    Réponses: 1
    Dernier message: 11/05/2011, 14h36
  3. requete sql sur une date
    Par Invité1 dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/03/2010, 14h30
  4. Ecrire une requete SQL sur plusieurs lignes
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 15/11/2004, 14h47
  5. Réponses: 2
    Dernier message: 03/05/2004, 12h13

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