Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en 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 23/05/2007, 14h10   #1
Invité régulier
 
Inscription : mai 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 14
Points : 9
Points : 9
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...
XhiAlpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 14h32   #2
Membre Expert
 
Avatar de Jasmine80
 
Jasmine
Inscription : octobre 2006
Messages : 2 824
Détails du profil
Informations personnelles :
Nom : Jasmine
Âge : 32
Localisation : Belgique

Informations forums :
Inscription : octobre 2006
Messages : 2 824
Points : 2 083
Points : 2 083
quelque chose de ce genre

Code :
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,
Jasmine80 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 14h51   #3
Invité régulier
 
Inscription : mai 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 14
Points : 9
Points : 9
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....
XhiAlpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 15h04   #4
Membre Expert
 
Avatar de Jasmine80
 
Jasmine
Inscription : octobre 2006
Messages : 2 824
Détails du profil
Informations personnelles :
Nom : Jasmine
Âge : 32
Localisation : Belgique

Informations forums :
Inscription : octobre 2006
Messages : 2 824
Points : 2 083
Points : 2 083
Code :
  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,
Jasmine80 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 15h08   #5
Invité régulier
 
Inscription : mai 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 14
Points : 9
Points : 9
Ok, je vais essayer quelque chose comme ça...

Je reviendrai si j'ai d'autres questions...
XhiAlpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 15h18   #6
Membre Expert
 
Avatar de Jasmine80
 
Jasmine
Inscription : octobre 2006
Messages : 2 824
Détails du profil
Informations personnelles :
Nom : Jasmine
Âge : 32
Localisation : Belgique

Informations forums :
Inscription : octobre 2006
Messages : 2 824
Points : 2 083
Points : 2 083
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,
Jasmine80 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 15h26   #7
Invité régulier
 
Inscription : mai 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 14
Points : 9
Points : 9
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.
XhiAlpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 15h39   #8
Membre Expert
 
Avatar de Jasmine80
 
Jasmine
Inscription : octobre 2006
Messages : 2 824
Détails du profil
Informations personnelles :
Nom : Jasmine
Âge : 32
Localisation : Belgique

Informations forums :
Inscription : octobre 2006
Messages : 2 824
Points : 2 083
Points : 2 083
A j'ai trouvé qqch qui devrait t'aider

Code :
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,
Jasmine80 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 16h13   #9
Invité régulier
 
Inscription : mai 2007
Messages : 14
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 14
Points : 9
Points : 9
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
XhiAlpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 16h19   #10
Membre Expert
 
Avatar de Jasmine80
 
Jasmine
Inscription : octobre 2006
Messages : 2 824
Détails du profil
Informations personnelles :
Nom : Jasmine
Âge : 32
Localisation : Belgique

Informations forums :
Inscription : octobre 2006
Messages : 2 824
Points : 2 083
Points : 2 083
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.
Jasmine80 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h56.


 
 
 
 
Partenaires

Hébergement Web