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 :

Création table agenda


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Création table agenda
    Bonjour,

    je dois réaliser une table "agenda" hebdomadaire en sql.
    Cette table comprend plusieurs champs: IDSemaine, numero_semaine (donc de 1 à 52) et Debut_semaine (champ de type date qui indique le premier jour de la semaine sous forme 2012/02/20 par exemple).

    Je dois réaliser un agenda qui irait jusque 2112 donc je voudrais faire un insert en boucle avec un incrément sur les jours de 7 et un incrément sur le numéro de semaine de 1 (et un test if num==53 then num=1)

    MAIS je ne parviens pas à trouver comment réaliser cette boucle en mysql version 5.5. Faut il écrire une procédure et si oui quelle syntaxe ? Je travaille dans phpmyadmin et je peux écrire des requêtes mais dois je écrire cette requête dans ma base de donnée ? Dans ma table agenda ?

    j'ai déjà tente de contourner le problème en passant par une boucle en php mais l'increment sur les dates en php nest pas coherent comme c'est le cas en mysql (ainsi il est possible d’insérer une date du style 2012/02/56... ce qui n'a pas de sens)

    Voilà le problème est posé, j'attends vos réponses avec impatience et vous remercie d'avance.

  2. #2
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Regarde si tu trouves une piste chez SQLPro.
    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 !

  3. #3
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    une façon qui peut être simple et sure de faire ça est de faire une procédure stockée qui :
    • balaye toutes les dates entre le début et la fin du calendrier et tu utilise un incrément de 7 jours...
    • dans la boucle, tu utilises la fonction qui te donne le numéro de semaine (au moins tu est sur que ça tient compte des années bissextiles)...


    après on peut discuter du besoin de faire une telle table, vu que tu peux avoir toutes ces infos directement par les fonctions sur les dates et donc ne stocker que les événements de ton agenda, les dates de jours fériés si nécessaire... et générer dynamiquement à chaque fois la courte portion de valeur dont tu as besoin sur la semaine ou le mois ou l'année grâce à une procédure...

    les 2 procédés sont équivalents... mais ne prennent pas la même place... et ne génèrent pas la même complexité de structure de données...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    j'ai un peu investigué ce que vous avez suggéré et je vais tente de répondre dans l'ordre:

    - je n'ai pas trouve ce que je cherchais sur sqlpro mais merci pour le lien !!
    - le besoin d'une telle table vient du fait que mon client a besoin d'employer en de multiples endroits ces IDsemaines et donc pour eviter la redondance, je voudrais réaliser une seule table de semaine.
    - j'ai tente le tutoriel sur les procédures MAIS quand je copie-colle leur code dans mon mysql en ligne de commande, ca bug pour des raisons de syntaxe. Je pense que je ne gere pas bien les delimiters et je ne comprends pas bien quand employer ; ou un autre delimiter tel que | pour que la compilation soit correcte. Donc je vais encore etudier ça et merci pour vos réponses !!

  5. #5
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    pour faire simple ta procédure peut ressembler à ça:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    delimiter $$$
    drop procedure if exists week_feeding$$$
    create procedure week_feeding(in start date,in stop date)
    begin
    	declare d date default date_add(datestart interval -weekday(datestart) day);
    	truncate table agenda;
    	while d<=datestop do
    		insert into agenda(numero_semaine, Debut_semaine)values(weekofyear(d),d);
    		date_add(d interval 7 day);
    	end while;
    end$$$
    delimiter ;
    -- prends bien la ligne de commentaire pour que le changement de delimiteur soit pris en compte

    ça suppose que tu utilise la table nommée agenda, sinon change le nom, et que IDSemaine est ta clé primaire donc en auto_increment...

    je recale la date arbitraire de départ que tu donnes, datestart, au premier jour de la semaine (lundi) à laquelle elle appartient... puis la boucle peuple la table en incrémentant de 7 jours à chaque fois jusqu'à la date butoir, datestop...

    rien de bien compliqué
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 5
    Points
    5
    Par défaut RESOLU
    Merci à tous pour vos réponses, après plusieurs jours j'ai enfin le bon code que je poste ci après au cas où.

    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
    CREATE PROCEDURE date()
    BEGIN
    DECLARE date DATE DEFAULT '2012-01-05';
    DECLARE numdate INT DEFAULT DATE_FORMAT(date,'%u');
     
     WHILE YEAR(date) < 2212 DO
     
     
     
    INSERT INTO `agenda`( `Semaine`, `Numero_Semaine`) VALUES ( date,numdate);
    SET date = ADDDATE( date, INTERVAL 7 DAY);
    SET numdate = DATE_FORMAT(date,'%u');
     
                    END WHILE;
    END|

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

Discussions similaires

  1. Probleme création Table
    Par jmjmjm dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/01/2006, 19h06
  2. pb oracle création table - foreign key
    Par dédéf dans le forum Oracle
    Réponses: 3
    Dernier message: 29/11/2005, 11h21
  3. Création table et relations
    Par ptitdragon_eric dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/09/2005, 13h37
  4. [noob]création table
    Par ggnore dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/01/2005, 11h18
  5. création table
    Par lepierre dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 17/09/2004, 11h32

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