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

PHP & Base de données Discussion :

probleme d'insertion des enregistrements


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 58
    Points : 27
    Points
    27
    Par défaut probleme d'insertion des enregistrements
    bonjour à vous tous.
    voila j'ai un nouveau probleme et j'espère que vous allez m'aider.
    mon probleme et quand j'inser des données dans ma base de donnés les enregistrements sont répetés et décalés. je vous explique :
    j'au une table avec les champs id,nom ,prenom, jour1,jour2
    (dans jour1 et jour2 il y'a l'absence de l'etudiant) et quand je fais l'insertion la table me donne ça :

    id || nom || prenom || jour1 || jour2

    123 || fakam || lione || abc1 ||
    167 || hido || sara || pres ||
    123 || fakam || lione || || pres1
    167 || hido || sara || || abc2

    et que moi je veux que le champ du jour2 soit en haut avec jour1 sans repeter le matricule le nom et le prenom.(sachant que j'ai des milliers d'enregistrements).comme ça :

    id || nom || prenom || jour1 || jour2

    123 || fakam || lione || abc1 || pres1
    167 || hido || sara || pres || abc2

    y'a -t- il une solution à ce grand probleme s.v.p ??
    merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Montre nous la portion de code ( et surtout la requête sql ) qui concerne cette opération stp

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 58
    Points : 27
    Points
    27
    Par défaut
    voici le code que j'ai fais :

    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
     
    for ($i=1; $i<=4; $i++)
    {	
      $sql="INSERT INTO resultat ( id, nom, prenom, jour$i) SELECT etudiant.id,etudiant.nom,etudiant.prenom,abcense.jour$i 
    	  from etudiant,abcense
    	  where etudiant.id = abcense.id";
    $requete = mysql_query ($sql) or die (mysql_error());	
     
    	$idConnect =mysql_connect('localhost','root','');
        $db = mysql_select_db("base");
    	$rqSql = "SELECT DISTINCT id, nom, prenom FROM resultats";
    	$result = mysql_query( $rqSql, $idConnect);
    	mysql_query("DELETE FROM resultats"); 
    	while ( $row = mysql_fetch_array( $result)) {
    	mysql_query("INSERT INTO resultats (id,nom,prenom) VALUES ('" . $row['id'] . "', '" . $row['nom'] . "','" . $row['prenom'] . "')"); 
    }

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 58
    Points : 27
    Points
    27
    Par défaut
    aucune idée ?? s.v.p

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Le code que tu donne ne correspondent pas à ce tu évoque.
    Ces requêtes sont faites pour créer les données, alors que là il s'agit de les récupérer et de les afficher.

    Il y a un truc qui me parais bizarre dans cette table "résultat", c'est justement "jour1" et "jour2".
    Théoriquement, ce n'est pas correcte coté conception.
    Si ce sont des jours correspondant à des absences, théoriquement ces données seraient liées à la table "absence", et non "resultats".
    Puis s'il y a plusieurs jours d'absences, peut être faudrait il une table spécifique pour ça, genre "jours_absences".
    (ce qui permettrait d'avoir 1, 10, n jours d'absences, et non 1 ou 2 jours uniquement)
    Enfin, si j'ai bien compris.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 58
    Points : 27
    Points
    27
    Par défaut
    oui exactement
    mai moi je fais juste un test pour 2 jours et ça marche pas . et aprés je vais géneralisé avec une boucle 31 jours.

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par ashley Voir le message
    oui exactement
    mai moi je fais juste un test pour 2 jours et ça marche pas . et aprés je vais géneralisé avec une boucle 31 jours.
    D'accord, mais d'un autre coté, il est difficile de donner un coup d'main quand une façon de procéder parait incorrecte ou étrange.


    Si je prends ton code tel qu'il est, il y a des truc vraiment pas clair.
    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
     
    for ($i=1; $i<=4; $i++)
    {	
      $sql="INSERT INTO resultat ( id, nom, prenom, jour$i) SELECT etudiant.id,etudiant.nom,etudiant.prenom,abcense.jour$i 
    	  from etudiant,abcense
    	  where etudiant.id = abcense.id";
    $requete = mysql_query ($sql) or die (mysql_error());	
     
    	$idConnect =mysql_connect('localhost','root','');
        $db = mysql_select_db("base");
    	$rqSql = "SELECT DISTINCT id, nom, prenom FROM resultats";
    	$result = mysql_query( $rqSql, $idConnect);
    	mysql_query("DELETE FROM resultats"); 
    	while ( $row = mysql_fetch_array( $result)) {
    	mysql_query("INSERT INTO resultats (id,nom,prenom) VALUES ('" . $row['id'] . "', '" . $row['nom'] . "','" . $row['prenom'] . "')"); 
    }
    En reprenant le déroulement :
    Ca part d'une boucle qui démarre à 1 jusqu'à 4 (et non 2).

    1/ Tu duplique des données de la table "etudiants" et "abcense" vers la table "resultats".
    Pourquoi dupliquer ces données ? A quoi ça sert ?
    A savoir que la redondance de données n'est pas recommandées, ça se fait quand cela est réellement nécessaire car ça complique les choses.

    2/ Après, tu récupère les données qui viennent d'être insérées (déjà là, il aurait bon de le faire qu'1 fois).

    3/ Tu supprime l'intégralité des donnée de la table "resultats".
    On se demande vraiment pourquoi les avoir insérées dans ce cas là ?

    4/ Tu insère à nouveau les données avec celles récupérée à l'étape 2.
    Par contre, seul l'id, les noms et les prénoms sont insérés, pas les jour1 et jours2.


    A quoi sert tout ça ?
    A quoi sert cette table "resultat" ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 58
    Points : 27
    Points
    27
    Par défaut
    merci pour vos reponses
    alors pour la table etudiant il contient : id,nom,prenom,matière
    la table abcense contient: id et les jours.
    la table resultat doit contenir id,nom,prenom,concatener (abcense et matère) champ par champs pour chaque etudiant et chaque jour.
    voila ce que je veux faire et a propos du code et sur tout la dernière partie je l'ai juste trouvé sur internet et je l'ai essayé alors je sais pas c'est ça va marcher ou bien non.
    j'espère que vous avez compris ce que je veux faire

  9. #9
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    alors pour la table etudiant il contient : id,nom,prenom,matière
    la table abcense contient: id et les jours.
    la table resultat doit contenir id,nom,prenom,concatener (abcense et matère) champ par champs pour chaque etudiant et chaque jour.
    C'est tout ça que je comprends pas justement.
    Et je ne suis pas certain de vraiment savoir ce que tu veux obtenir.
    Cependant, tu ne réagit pas sur mes remarques, si elles te paraissent logiques ou pas, justifiées, ou pas.

    Question comme ça : Comment sont stocké les jours, et quel type de champs as tu mis ?

    Je ne connais peut être pas toute la problématique lié au secteur, mais comme ça je dirais que cette table "resultat" ne servirait à rien, au contraire, elle ne ferait que compliquer les choses.
    Mais encore, je ne sais pas si c'est des erreurs de frappes ici, mais je viens de remarquer que tantôt c'est "resultat", et tantôt "resultats" (avec un S), ce serait alors 2 tables différentes, ce qui m'intrigue d'autant plus.


    Je te dis comment je perçois les choses.
    On a donc une table "etudiant", et on a une table "absences".
    La table "absence" serait :
    id_absence | id_etudiant | date_debut | date_fin
    Donc toutes les absences de tous les étudiants s'y trouveront, avec la date ou débute l'absence, et la date du retour.
    (Pas besoin de table "jours_absences" dans ce cas là).
    Ici, on peu donc savoir les périodes d'absences de chaque étudiants, (chaque ligne est une période).

    Je ne pourrais pas dire si cela est vraiment correcte, ou si c'est cela que tu as représenté.
    Mais ici, il me me semble simple de pouvoir lister toutes les périodes de chaque étudiant, ou d'1 étudiant (et ça, sans avoir recourt à une autre table).


    123 || fakam || lione || abc1 || pres1
    167 || hido || sara || pres || abc2
    Après, c'est quelque peu énigmatique, car tu donne un exemple qui ne serait pas réel, du coup, on ne sait pas.
    Qu'est ce que c'est "abc1" et "pres1" ? Une date, l'heure, un Oui/Non, ou est ce réellement comme ça que tu souhaite afficher ?
    Et puis, est ce qu'1 ligne représente 1 jour ?
    Est il possible d'avoir par exemple 2 heures d'absence dans la même journée (2 périodes, donc 2 lignes) ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/02/2008, 16h17
  2. probleme de positionnement des enregistrements
    Par tchimou dans le forum Bases de données
    Réponses: 5
    Dernier message: 03/04/2007, 00h28
  3. Probleme d'insertion d'enregistrement
    Par haffouff dans le forum JDBC
    Réponses: 3
    Dernier message: 30/03/2007, 13h07
  4. [JDBC]Probleme d'insertion des valeurs !!
    Par tarik75 dans le forum JDBC
    Réponses: 6
    Dernier message: 27/07/2005, 12h41
  5. []Problème d'affichage des enregistrements dans un DataReport
    Par GeniuZ dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 05/01/2005, 16h52

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