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 :

Récupérer dernier id et mettre à jour


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 23
    Par défaut Récupérer dernier id et mettre à jour
    Bonjour, je cherche un script ou un exemple pour récupérer le dernier id d'une table et ensuite faire une boucle pour mettre à jour un autre champs de cette même table en incrémentant(de 1) à partir de ce dernier ID.

    Cela serait du genre:

    id champ1 champ2 champ3 champ4 champ5 champid
    1
    2
    3...

    et donc crée un moyen pour récupérer le 3 et mettre dans champid pour l'id 1 , 3 puis mettre 4 pour l'id 2 etc..

    Je ne sais pas si on voit ce que je veux, mais je galère.. merci d'avance

  2. #2
    Membre expérimenté
    Avatar de mathieugut
    Profil pro
    Webmaster
    Inscrit en
    Mars 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2008
    Messages : 225
    Par défaut
    Salut,

    Bien si tes id se suivent, il y a peut être une manière plus facile de remplir le champid lorsque tu mets à jour...

    Exemple tu as :

    id | champid
    1 ---- 5
    2 ---- 6
    3 ---- 7
    4 ---- 8
    5 ---- 9

    Comme tu peux le voir dans ce cas, il suffit de rajouter 4 pour obtenir le champid et pour obtenir le 4 il suffit de compter le nombre d'enregistrements et de lui enlever 1...

    Exemple, tu as 122 enregistrements, donc l'id n°122 qui doit se retrouver dans le champid de l'id n°1, bien tu fais 1+(122-1) = 122, 2+(122-1)=123...

    Avec une assez simple requête tu peux obtenir le nombre d'enregistrements.

    Bien entendu dans mon exemple il faut que les id se suivent et sans coupures...
    Bienvenue dans la matrice, attention à bien lire les règles...

    .::Mon espace perso developpez.com ::.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 33
    Par défaut
    sur quelle BD tu travailles, et quel est le type de ton champs??

    si il est AUTO_INCREMENT tu peux utiliser les fonctions suivantes:

    POSTGRESQL
    http://fr.php.net/manual/fr/function.pg-last-oid.php

    MYSQL
    http://fr.php.net/manual/fr/function...-insert-id.php

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 23
    Par défaut
    En faites je suis un peu perdu..pour tout expliquer, je dois importer des fichiers excels vers une base mysql. Alors j'ai arrivé à créer une application qui me permet de transformer les fichiers en .csv et ensuite les importer dans ma base de donnée. Mais mon souci vient du système des clés étrangères.
    Alors je "bricole" comme je peux pour essayer lors de l'insertion d'avoir quelquechose dans mes clé étrangères. Je peux donner une exemple:
    J'ai un fichier Excel contenant des personnes appartenant à un organisme avec le nom de ces personnes(appartenant à d'autres organismes), leurs adresses (entre autres).
    Dans ma base de donnée, j'aurais une table Adresse avec (IdAdresse, Adresse, CP, Ville, IdPersonne) et une table Personne(IdPersonne, Nom, Prenom).
    Pour cela, j'ai crée en php une application qui va me lire les premiers champs du fichier excel ( ce qui correspond au champ des tables ou qui peuvent correspondre) et je vais effectuer une comparaison de ces champs de cette première ligne avec ceux des champs de la table correspondante, puis j'insère mais pour la clé étrangère, j'ai un souci ( par exemple pour Adresse, idPersonne aura un champ nul puisque rien ne peut correspondre..)

    Je n'ai pas trouvé grand chose sur le net, pourtant je pense que cela a du déjà arrivé, Si quelqu'un aurait une idée, sur la façon de procéder.. fin merci d'avance et en faites oublier mon idée de récupérer l'id c'était une trés mauvaise idée

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Commençons par la conception...
    J'ai un fichier Excel contenant des personnes appartenant à un organisme avec le nom de ces personnes(appartenant à d'autres organismes), leurs adresses (entre autres).
    Selon moi, tu as une entité Personnes et une entité Organismes.
    Si je comprends bien le sens de ta première parenthèse, une personne peut appartenir à plusieurs organismes. On a donc la relation :
    Personnes -0,n----Appartenir----0,n- Organismes

    On peut aussi faire une entité contenant les adresses comme tu le prévois, puisque un organisme ou une personne peut avoir plusieurs adresses(d'établissement pour l'organisme, de résidence principale ou secondaire pour la personne).
    Ce qui donne les relations :
    Personnes -0,n----Résider----0,n- Adresses
    Organismes -0,n----Être établi----0,n- Adresses
    Personnes -0,n----Appartenir----0,n- Organismes

    A noter qu'on peut aussi séparer les villes et les pays et les relier aux adresses, selon ce schéma :
    Adresses -1,1----Domicilier----0,1- Villes -1,1----Situer---0,n- Pays

    Ce qui nous donnerait les tables :
    Personnes(PersId, PersNom, ...)
    Organismes(OrgId, OrgNom, ...)
    Pays(PaysId, PaysNom, ...)
    Ville(VilleId, FK_VPays, VilleNom, ...)
    Adresses(AdrId, FK_AVille, ...)
    PersAdr(FK_PAPersonne, FK_PAAdresse, PAType, ...)
    OrgAdr(FK_OAOrganisme, FK_OAAdresse, OAType, ...)
    PersOrg(FK_POPersonne, FK_POOrganisme, ...)

    Parlons ensuite de la méthode...
    je dois importer des fichiers excels vers une base mysql. Alors j'ai arrivé à créer une application qui me permet de transformer les fichiers en .csv et ensuite les importer dans ma base de donnée.
    J'ai un fichier Excel contenant des personnes appartenant à un organisme avec le nom de ces personnes(appartenant à d'autres organismes), leurs adresses (entre autres).
    Importe ta ou tes tableaux Excel en brut dans des tables MySQL ayant les mêmes colonnes. Tu détruiras ces tables plus tard.
    Crée la structure de tes tables définitives avec phpMyAdmin ou tout autre outil qui te convient, y compris les index et contraintes de clés étrangères. Bien sûr pour que ça marche, il faut faire ça dans un certain ordre, par exemple l'ordre que j'ai proposé ci-dessus.

    Ensuite tu peux tranquillement créer des requêtes MySQL qui vont insérer les données de tes tables brutes importées d'Excel vers tes tables définitives.
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Personnes(PersNom, PersPrenom, {autres colonnes récupérables}...)
    SELECT DISTINCT(Nom, Prenom), {autres colonnes que tu peux récupérer en même temps}
    FROM taTableImportéeDExcel
    ORDER BY Nom, Prenom
    Bien sûr une analyse des données s'impose au préalable :
    - N'y a t-il pas plusieurs personnes différentes avec le même nom et le même prénom ?
    - Le prénom est-il renseigné pour toutes les personnes afin d'en faire un critère discriminant ?
    - N'y a t-il pas une autre colonne qui permet d'identifier de manière unique une personne ? Un n° d'adhérent par exemple.

    Bon courage !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 23
    Par défaut
    Merci à vous pour vos réponses. J'ai appliqué l'idée de Cinephil, mais j'ai un autre problème (oui je sais j'ai du mal..) . C'est au niveau des mises à jours, car je peux avoir des mêmes fichiers excel avec d'autres données, mais comment faire pour mettre à jour les données ou les insérer? Il faudrait parcourir le fichier csv en même temps que la base de données? Quelqu'un aurait un exemple de ce genre de pratique, merci d'avance

    bonne journée

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Un peu usine à gaz : on parcourt tous les enregistrements en les mettant à jour.
    Je ne sais pas bien ce que tu veux faire sur le fond, il faudrait peut etre revoir la conception de ta base.

    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
     
    // on cherche le dernier id en supposant que c'est le plus grand
    $sql = 'SELECT max(id) FROM table LIMIT 1';
    $sth = $dbc->query($sql);
    $maxid = $sth->fetchColumn();
     
    // on prepare la requete de mise à jour
    $sql = 'UPDATE table SET champid=:champid WHERE id=:id';
    $sth_updateid = $dbc->prepare($sql);
     
    // on démarre au plus grand id
    $champid = $maxid;
     
    // on lit toutes les lignes
    $sql = 'SELECT id from table';
    $sth = $dbc->query($sql);
     
    while ($data = $sth->fetch(PDO::FETCH_ASSOC)) {
     
    // on met à jour chaque ligne
    $sth_updateid->execute(array(':champid'=>$id,':id'=>$data['id']))
    $champid++
     
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Récupérer des données et mettre à jour automatiquement un tableau
    Par sooapy dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/01/2014, 22h00
  2. Réponses: 1
    Dernier message: 16/12/2011, 05h51
  3. [Red Hat 9] Mettre à jour Kerberos par la compilation des dernieres sources dispo
    Par arnaudperfect dans le forum RedHat / CentOS / Fedora
    Réponses: 0
    Dernier message: 04/06/2010, 11h00
  4. Réponses: 1
    Dernier message: 10/02/2009, 08h36
  5. Réponses: 6
    Dernier message: 14/02/2003, 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