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 :

Update idMax pour enregistrement dans autre table [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut Update idMax pour enregistrement dans autre table
    Bonjour à tous

    Depuis un bon moment, j'essaie en vain d'enregistrer l'idMax d'une table pour l'updater dans le dernier enregistrement d'une autre table...

    J'ai l'impression d'approcher de la solution, mais c toujours pas ça.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // RECUPERATION de l'idImgMax de la table 'imgDocSerie' en selectionnant la derniere ligne cree ds BDD
    	$query = "SELECT MAX(idImg) AS idImgmax FROM ".$table.";"; 
    	$result = mysql_query($query) or die('Erreur SQL ! '.$query.'<br/>'.mysql_error());
    	$val_idImgmax = mysql_fetch_array($result);
    	$idImg = $val_idImgmax['idImgmax'];
     
    // ENREGISTREMENT de cet idImgMax dans la table serieDoc par UPDATE
    $sqlUptadeImgSerie=mysql_query("UPDATE serieDoc SET idImg = '$idImg' WHERE idImg=$idImg")  ;

    Si j'enlève le WHERE, ça me met $idImg dans toutes les lignes de la table serieDoc, ça l'a donc bien récupéré mais il faudrait que ça n'apparaisse que pour le dernier enregistrement.

    Par contre, avec le WHERE, ça met NULL dans le dernier enregistrement de la colonne idImg de la table serieDoc

    C'est donc ma condition WHERE qui cloche, pouvez-vous m'aider ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    Si on traduit votre requête en français :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE serieDoc SET idImg = '$idImg' WHERE idImg=$idImg
    Vous updatez la table serieDoc et affecté à la colonne idImg la valeur retournée par l'autre requête.
    Et ceci pour la ligne où idImg est égale à la valeur retournée par l'autre requête.

    Le comportement est donc normal.

    Identifiez mieux ce que veut dire "le dernier enregistrement" et traduisez le correctement en sql.

    edit: sinon pas besoin de passer par une variable temporaire, l'update devrait pouvoir se faire en une seule requête

    edit2 : un autre posteur à émis l'idée d'un problème php, ce qui peut être juste aussi... Mais le problème SQL restera

  3. #3
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    Bonjour Punkoff et merci de votre réponse

    J'étais arrivée à une conclusion semblable en mangeant (je ne lui indique pas d'idSerieDocMax)...

    Par contre, je suis un peu au bout de mes petites ressources et je ne vois pas comment en arriver là

    Auriez-vous la gentillesse de me montrer comment faire ?

    Autre question, subsidiaire, comment faites-vous pour que votre code apparaisse avec la bonne coloration syntaxique ???

    Un super merci d'avance.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    pour la couleur c'est la balise [code]

    Pour votre demande, tant que vous n'aurez pas développé ce que veut dire "dernier enregistrement" ca va être difficile de vous orienter.

    (regardez le post-it de ce forum sur les règles de base pour expliquer un problème).

  5. #5
    Membre confirmé Avatar de StephBretagne
    Femme Profil pro
    Inscrit en
    Mars 2012
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 147
    Par défaut
    j'avais bien mis les balises [ code ] mais je trouve votre ligne mieux colorée que les miennes

    J'ai lu les règles du forum SQL il y a quelques jours mais faut croire que j'avais pas tout retenu, désolée.

    Donc, je suis en mySQL 5.5.16 - PHP: 5.3.8

    J'ai une base de données contenant 15 tables. Voici les 2 dont il est question ici :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    -- --------------------------------------------------------
    --
    -- Structure de la table imgDocSerie (6)
    --
    CREATE TABLE imgDocSerie (
    idImg INT(4) NOT NULL AUTO_INCREMENT ,
    titrImg1 VARCHAR (100),
    imgExt1 VARCHAR(100),
    vueExt1 VARCHAR(100),
    CONSTRAINT pk_imgDocSerie
    	PRIMARY KEY (idImg) 
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
     
    --
    -- Contenu de la table 'imgDocSerie' (1er film et 1ère série)
    --
     
    INSERT INTO imgdocserie (idImg, titrImg1, img1, vue1) VALUES
    (1, 'Lucinda by Lucinda', '1-lucinda.jpg', 'vue_1-lucinda.jpg'),
    (2, 'Les batailles de l''or vert', '2-batailles_or_vert.jpg', 'vue_2-batailles_or_vert.jpg');
    -- --------------------------------------------------------
    --
    -- Structure de la table serieDoc (7)
    --
     
    CREATE TABLE IF NOT EXISTS serieDoc (
      idSerieDoc tinyint (2) NOT NULL AUTO_INCREMENT, 
      nomSerieDoc_fr varchar(255) NOT NULL,
      nomSerieDoc_en varchar(255) NOT NULL,
      nbDocsSerie smallint(2),
      idImg int(4),
      CONSTRAINT pk_serieDoc
    		PRIMARY KEY (idSerieDoc),
      CONSTRAINT fk_imgDocSerie_serieDoc
    		FOREIGN KEY (idImg) REFERENCES imgDocSerie(idImg) ON DELETE CASCADE
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
     
    --
    -- Contenu de la table 'serieDoc' (1ere série)
    --
    INSERT INTO seriedoc (idSerieDoc, nomSerieDoc_fr, nomSerieDoc_en, nbDocsSerie, idImg) VALUES
    (1,'Les batailles de l''or vert', 'Plant wars', 3, 2);
     
    -- --------------------------------------------------------
    Formulaire 1 : je rentre une nouvelle série (de films documentaires) dans la table serieDoc.
    Son idSerieDoc sera 2 (puisque la première ligne est pré-remplie)
    Cela rempli les 4 premières colonnes de cette 2ème ligne comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    seriedoc
    (idSerieDoc, nomSerieDoc_fr, nomSerieDoc_en, nbDocsSerie, idImg) 
    VALUES
    (1,'Les batailles de l''or vert', 'Plant wars', 3, 2);
    (2,'nom2','name2', 6, NULL);
    Formulaire 2 : Je rentre une nouvelle image dans la table imgDocSerie.
    Son idImg sera 3 (puisque les 2 premières lignes sont préremplies).
    Cela rempli correctement toutes les colonnes de ma 3e ligne.


    Je voudrais que, dans la table serieDoc, quand je clique sur le submit du formulaire2, cela update la valeur de la 5e colonne (idImg=3) de la 2e ligne pour obtenir ce résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    seriedoc
    (idSerieDoc, nomSerieDoc_fr, nomSerieDoc_en, nbDocsSerie, idImg) 
    VALUES
    (2, 'nom2', 'name2', 6, 3);
    En bref, je voudrais que cela remplace NULL par 3.

    Je ne sais pas si c'est plus clair, n'hésitez pas à me redemander si ce n'est pas le cas.

    Edit : j'ai essayé de faire une table des résultats attendus comme préconisé dans les règles du forum mais le résultat est loin d'être convaincant

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    beh c'est pas tres compliqué :

    il vous faut l'id du doc, l'id de l'image et boum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update serieDoc set idImg = ma_variable_image where idSerieDoc = ma_variable_doc
    Je ne comprend pas bien pourquoi, dans ce cas d'utilisation, vous faites des requêtes sql pour trouver le max de l'id de la table imgDocSerie.

    Tout ceci devrait être en session à ce stade !


    Et sinon c'est normal que la pk de serieDoc soit un tinyint(2) ? 100 série max c'est pas beaucoup.

    Et niveau modélisation ne vous est-il pas possible d'avoir plusieurs image pour une même série ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/05/2011, 13h30
  2. Réponses: 2
    Dernier message: 29/10/2008, 15h31
  3. Réponses: 3
    Dernier message: 20/03/2008, 14h35
  4. Réponses: 7
    Dernier message: 22/08/2007, 11h49
  5. Réponses: 1
    Dernier message: 27/02/2007, 23h08

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