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 SET mysql avec clé, valeur d'un array


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut UPDATE SET mysql avec clé, valeur d'un array
    Bonjour,
    je suis plutôt débutant en php, même si je sais faire quelques petites bricoles
    Je sèche totalement sur un problème d'UPDATE SET.

    Le but de mon script est :

    1) récupérer dans un array les clés : nombres d'occurences associées (sur 1 première table "ins")

    2) faire un while pour réaliser l'UPDATE SET en mettant à jour une 2eme table "site" en utilisant comme clé le champs id_site.

    ////////////////////////////

    1) je récupère ce qui m'intéresse dans un array (à partir de la table "in")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    require_once("config.php");
       $connexion = mysql_connect($host,$user,$passwd);
       mysql_select_db('ma_base',$connexion);
     
    $value = array ();
    $i = 0;
     
    $reponse = mysql_query("SELECT * FROM ins WHERE valide_in='1' GROUP BY id_site,ip", $connexion);
    while ($donnees = mysql_fetch_array($reponse))
    {
    $value[$i] = $donnees['id_site'];
    $i++;
    }
    $tableau = array_count_values($value);

    -> si je fais un print_r($tableau);

    j'obtiens bien :
    Array ( [362] => 3 [363] => 1 [364] => 1 [367] => 1 )

    la clé de l'array étant bien id_site associée aux nombres d'occurences comptées (valeur).


    Ce que je sais pas du tout faire, c'est de faire un while pour mettre à jour une autre table (site) en utilisant les clés/valeur de cet array...
    -> le champs id_site existe dans la table ins et site.
    -> le champs devant recueillir les valeurs de l'array se nomme nb_ins (dans la table site).

    Je vous remercie pour votre aide, car là je sèche totalement, merci à vous.

  2. #2
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Fais ton compte directement dans ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $reponse = mysql_query("SELECT id_site, COUNT(*) as nombre FROM ins WHERE valide_in='1' GROUP BY id_site", $connexion);
    while ($donnees = mysql_fetch_array($reponse))
    {
    $sql = "UPDATE table SET ton_champA = " . $donnees['id_site'] . ", ton_champB =" $donnees['nombre'];
    ...
    }

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci sabotage, j'ai testé l'update set dans ce while mais les données ne sont pas transférées dans la table2 (site) :

    $reponse = mysql_query("SELECT id_site, COUNT(*) as nombre FROM ins WHERE valide_in='1' GROUP BY id_site,ip", $connexion);
    while ($donnees = mysql_fetch_array($reponse))
    {
    $sql = "UPDATE site SET id_site = " . $donnees['id_site'] . ", nb_ins =" .$donnees['nombre'];
    }

    rien est envoyé

  4. #4
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    La ou j'ai mis "..." c'est qu'il y a des choses à écrire hein.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par sabotage Voir le message
    La ou j'ai mis "..." c'est qu'il y a des choses à écrire hein.
    J'ai reformulé différement la requête pour l'update :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $reponse = mysql_query("SELECT id_site, COUNT(*) as nombre FROM ins WHERE valide_in='1' GROUP BY id_site,ip", $connexion);
    while ($donnees = mysql_fetch_array($reponse))
    {
    //$sql = "UPDATE site SET id_site = " . $donnees['id_site'] . ", nb_ins =" .$donnees['nombre'];
    $update = mysql_query("UPDATE outs SET id_site = " . $donnees['id_site'] . ", ip =" .$donnees['nombre']."")or die(mysql_error()); 
    }
    mais tout les champs de la table2 (site) hérite de la même clé/valeur.
    3h que je me tire le poil et je ne vois pas le le code manquant à la place des ...
    Vais me prendre un café pour me relaxer le cortex.

  6. #6
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Encore une fois j'ai ecris ça de manière rapide juste pour te montrer comment faire le regroupement et ou placer l'update.
    La requete, si je devine bien ce que tu veux serait plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $update = mysql_query("UPDATE outs SET ip =" .$donnees['nombre']." WHERE id_site = " . $donnees['id_site'])or die(mysql_error());

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Lors du SELECT qui précède l'UPDATE SET, j'avais absolument besoin de faire un GROUP BY id_site,ip pour trier correctement les données.

    Pour l'UPDATE SET, j'ai contourné le soucis en faisant une boucle foreach
    qui met à jour la $val suivant la $key :

    foreach ($tableau as $key => $val)
    {
    $update = mysql_query("UPDATE outs SET ip =" .$val." WHERE id_site = " . $key."")or die(mysql_error());
    }

    Aucune idée de la charge serveur que cela peut provoquer lors du foreach si le nombre de lignes est élevée, mais ça fonctionne.
    Merci pour tes infos sabotage.

Discussions similaires

  1. Updater une table avec plusieurs valeurs
    Par hammag dans le forum SQL
    Réponses: 10
    Dernier message: 28/03/2012, 16h02
  2. Réponses: 0
    Dernier message: 15/04/2010, 13h54
  3. Update d une table avec plusieurs valeurs
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2006, 08h58
  4. UPDATE * SET php/mysql
    Par Invité dans le forum Requêtes
    Réponses: 13
    Dernier message: 28/03/2006, 11h47
  5. Pb UPDATE champ nullable avec la valeur Null
    Par zev dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 01/02/2005, 14h04

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