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

SQL Procédural MySQL Discussion :

Insertions multiples en prenant comme argument un jour de la semaine


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut Insertions multiples en prenant comme argument un jour de la semaine
    Bonjour à tous,

    je développe un Intranet de gestion de salles pour une municipalité. Le site est en PHP, et la BdD est en MySQL v5.

    Mais j'ai un petit problème : dans le cadre d'une modification du cahier des charges, je dois prendre en charge des réservations hebdomadaires.

    Donc, dans le formulaire de ce type de réservations, on spécifie date de début, date de fin, horaires de la réservation et JOUR de la réservation.

    Le but du jeu est donc d'insérer dans la table des locations une réservation à chacune des dates comprises dans l'intervalle spécifié et dont le jour est JOUR.

    Je pense que c'est peut_être plus simple de gérer en MySQL qu'en PHP, MySQL disposant des fonctions appropriées (DAYOFWEEK...), mais je n'arrive pas à définir la ou les requete(s) SQL à insérer dans ma page PHP...

    Any idea ??

    Merci par avance pour vous pencher sur mon problème...

  2. #2
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    quelque chose de ce genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            // Connexion à la DB
            $DB=mysql_connect("localhost","utilisateur","motdepasse");
            mysql_select_db("table","DB");
     
            // Requête SQL
            $sql ='';
            $req = mysql_query($sql) or die('Erreur SQL !');
    Quelle est la structure de ta table? C'est pas facile de répondre sans la connaître. Que veux-tu faire exactement?
    Il faudrait faire un INSERT INTO matable
    ou un
    UPDATE matable SET .... WHERE (date BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD' ) AND ChampJour = 'VariableJour'
    et pour le jour c'est simplement SELECT DAYOFWEEK(date) et en fonction du chiffre renvoyer tu attribues le jour.


    Jasmine,

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut
    j'ai déjà tout ça... mais merci de m'avoir répondu.

    Ce que je demande, c'est si l'on désire faire un insert sur un intervalle de date1 à date2 en prenant en compte uniquement le jour pour sélectionner les "bonnes dates", on fait comment.

    le formulaire PHP permet d'obtenir (pour faire court) :
    la date initiale de la réservation (format date) ; ex : 12 mai 2007
    la date finale de la réservation (format date) ; ex 30 decembre 2007
    jour choisi (numérique pour coller au renvoi de la fonction dayofweek() de MySQL) ; ex : le lundi
    heure de début (format time) : ex 08h00
    heure de fin (format time): ex 20h00


    Est-ce que l'on crée une table où on insére par exemple toutes les dates d'une année, et leur dayofweek() correspondant ?
    Dans ce cas, il est extrêmement simple de récupérer les datetime (ou équivalents) dont le dayofweek() a la valeur qu'on cherche...
    Un simple

    Select * from une_table where date between $date_initiale and $date_finale and dayofweek(date) = $valeur_jour ;

    devrait suffire. Puis pour chaque date obtenue, on fait un insert dans la table de réservation...
    Le seul point lourd, c'est que ce système de réservation hebdo doit marcher pour 2 ans à l'avance. Un trigger (?) doit alors permettre de s'assurer que la table (date/dayofweek)évolue pour proposer toutes les dates 2 ans à l'avance.

    Ou peut-on faire plus simple ? Requeter en prenant l'intervalle donné par l'utilisateur, et le dayofweek() à la suite du formulaire....

  4. #4
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      WHERE (ChampDate between 'YYY-MM-DD' AND 'YYY-MM-DD' ) AND (SELECT DAYOFWEEK(ChampDate)= 2)
    ou 2 signifie que le jour entrer est un lundi

    Tu as donc tes trois variables dans ta requête.
    - date de début
    - date de fin
    - jour (que tu dois préalablement convertir en chiffre)

    C'est vrai que c'est très loud pour deux ans, je vais réfléchir à plus simple.

    Jasmine,

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut
    Ok, je vais essayer quelque chose comme ça...

    Je reviendrai si j'ai d'autres questions...

  6. #6
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Je ne connais pas bien php mais je pense que ça serait plus simple d'utiliser ses fonctions sur les dates au lieu de se servir de celles d'SQL.

    Jasmine,

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut
    A ma connaissance, PHP fait très bien les manipulations de date (conversions timestamp...), et sait retrouver le jour à partir de la date, mais pas le contraire.

    Je vais aller rechercher dans le forum PHP pour voir si le problème s'est déjà posé...

    Merci encore.

  8. #8
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    A j'ai trouvé qqch qui devrait t'aider

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    if (isset($_POST['jour']) AND isset($_POST['mois']) AND isset($_POST['an']))
    {
        // Le visiteur vient d'entrer sa date de naissance, on va calculer le jour qu'il était.
     
        // On calcule le timestamp correspondant à la date entrée
        $timestamp_naissance = mktime(0, 0, 0, $_POST['mois'], $_POST['jour'], $_POST['an']);
        // On récupère le numéro du jour correspondant au timestamp (0, 1, 2, 3...)
        $numero_jour = date('w', $timestamp_naissance);
     
        // On crée un array pour numéroter les jours (0 => Dimanche, 1 => Lundi...)
        $jours = array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
        // On récupère le nom du jour en français grâce à l'array qu'on vient de créer
        $jour_naissance = $jours[$numero_jour];
     
        // Puis on affiche le résultat
        echo '<p>Vous êtes né un ' . $jour_naissance . '</p>';
    }
    else // Sinon, c'est que le visiteur n'a pas encore entré sa date de naissance, on affiche le formulaire
    {
    ?>
     
    <p>Indiquez votre date de naissance (jj/mm/aaaa) :</p>
     
    <form method="post" action="naissance.php">
    <p>
        <input type="text" name="jour" size="2" maxlength="2" /> /
        <input type="text" name="mois" size="2" maxlength="2" /> /
        <input type="text" name="an" size="4" maxlength="4" /><br /><br />
        <input type="submit" value="Envoyer" />
    </p>
    </form>
    <?
    }
    ?>

    Jasmine,

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 14
    Par défaut
    C'est exactement la première partie qui m'interesse...

    // ON calcule le timestamp correspondant à la date entrée
    $timestamp_naissance = mktime(0, 0, 0, $_POST['mois'], $_POST['jour'], $_POST['an']);
    // ON récupère le numéro du jour correspondant au timestamp (0, 1, 2, 3...)
    $numero_jour = date('w', $timestamp_naissance);

    Donc dans ce sript, il convertisse une date (un peu en morceaux, comme les miennes) en time stamp puis il en ressorte le numéro du jour...

    MAIS il me manque encore l'équivalent de la fonction ADDDATE de MySQL pour pouvoir obtenir tous les jours à tester entre le jour initial et le final.

    Je suis sur la bonne voie... Ce sera donc tout en PHP... Vais me faire virer d'ici

  10. #10
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Tant mieux si tu es sur la bonne voie.
    Bonne chance sur l'autre partie du forum ^^
    PHP c'est pas trop mon truc, je râme.


    Jasmine,


    PS: mets peut-être "résolu" que les gens sachent qu'ils ne faut plus venir répondre ici.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête avec la date du jour comme argument
    Par Invité dans le forum Requêtes
    Réponses: 7
    Dernier message: 17/11/2010, 19h25
  2. Réponses: 3
    Dernier message: 09/04/2010, 12h18
  3. vector<bool> comme argument de fonction
    Par Krishna dans le forum SL & STL
    Réponses: 11
    Dernier message: 09/09/2004, 08h30
  4. pb d'insertions multiples
    Par devalender dans le forum SQL
    Réponses: 2
    Dernier message: 14/07/2004, 14h49
  5. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

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