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

 MySQL Discussion :

Addition de colonne mysql sauf une ligne


Sujet :

MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut Addition de colonne mysql sauf une ligne
    Bonjour,
    Une demande de débutant mais, je voudrai additionner toutes les valeurs d'une colonne d'un tableau sauf l'endroit ou j'écris le résultat ( car à chaque fois, j'additionne tout)
    J'ai utilise SUM , mais peut-on exclure une ligne dans cette somme?
    Merci pour votre aide
    Syldup

  2. #2
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 60
    Points
    60
    Par défaut
    pour exclure une ligne il fau utilise WHERE
    par exemple where id=x avec x l'id de la ligne a exclure

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Points : 138
    Points
    138
    Par défaut
    là ça ne va selectionner qu'une ligne,
    il faut plutot faire:
    WHERE colonne<>"x"

  4. #4
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 60
    Points
    60
    Par défaut
    ou where colonne !=x

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Merci, ça marche très bien.
    Mais j'ai encore une question, mais je ne sais pas si je doit ouvrir une nouvelle discussion.
    Je fais la même addition pour plusieurs colonne qui ont forcément un nom différents.
    Comment faire pour ne pas répéter la même requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // calcul du total de points par sortie la_randonnee_guy_et_colette
     $reponse=$bdd->query("SELECT SUM(la_randonnee_guy_et_colette) AS la_randonnee_guy_et_colette FROM resultat_2013 WHERE nom_club !='totaux'");//calcul du total des points
     $donnees = $reponse -> fetch();
     $reponse->closeCursor();
    //ecriture du résultat la_randonnee_guy_et_colette
     $req = $bdd->prepare  ("UPDATE resultat_2013  SET la_randonnee_guy_et_colette = :total   WHERE nom_club = :nom_club ");
     $req->execute(array("total" => $donnees['la_randonnee_guy_et_colette'], "nom_club"=>"totaux"));
     $req->closeCursor();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // calcul du total de points par sortie la_chataigneraisienne
     $reponse=$bdd->query("SELECT SUM(la_chataigneraisienne) AS la_chataigneraisienne FROM resultat_2013 WHERE nom_club !='totaux'");//calcul du total des points
     $donnees = $reponse -> fetch();
     $reponse->closeCursor();
    //ecriture du résultat la_chataigneraisienne
     $req = $bdd->prepare  ("UPDATE resultat_2013  SET la_chataigneraisienne = :total   WHERE nom_club = :nom_club ");
     $req->execute(array("total" => $donnees['la_chataigneraisienne'], "nom_club"=>"totaux"));
     $req->closeCursor();
    Merci pour votre aide
    Syldupas

  6. #6
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 60
    Points
    60
    Par défaut
    1- création d'un tableau qui contient les colonne dont il faut faire la somme.
    2- parcourir ce tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse=$bdd->query("SELECT SUM(la_randonnee_guy_et_colette) AS la_randonnee_guy_et_colette FROM resultat_2013 WHERE '".$tab[i]."'!='totaux'");//calcul du total des points

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Merci pour votre réponse mais je ne comprends pas.
    A quoi correspond $tab[i]."'!='totaux'" ?
    Je veux additionner et écrire dans un tableau SQL 23 colonnes portant chacune un nom différent.
    Syldupas

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Points : 138
    Points
    138
    Par défaut
    Il faut utiliser des "requêtes préparées" pour ne pas réécrire a chaque fois les mêmes requêtes.

    Et pour cela il faut utiliser PDO.

    Vérifie déjà que ton hébergeur supporte PDO à l'aide de la commande phpinfo()

  9. #9
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 60
    Points
    60
    Par défaut
    il faut metre dans une table php tous les non des colonne
    tab[0]=nom_colonne_0
    tab[1]=nom_colonne_1
    ...
    ensuite tu exctue ton requête avec dans la condition where
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $tab[i]."'!='totaux'" //si ils sont tous les colonnes dans la même table.
    for(i=0; i<23;i++)
    {
     
    // calcul du total de points par sortie la_randonnee_guy_et_colette
    $reponse=$bdd->query("SELECT SUM(la_randonnee_guy_et_colette) AS la_randonnee_guy_et_colette FROM resultat_2013 WHERE "'.tab[i].'" !='totaux'");//calcul du total des points
    $donnees = $reponse -> fetch();
    $reponse->closeCursor();
    }

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Merci pour votre réponse.
    J’asseye et je vous tiens au courant
    Syldupas

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    J'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Préparation des requêtes
        $reponse=$bdd->prepare('SELECT SUM nom_sortie =:nom_sortie AS points FROM resultat_2013 WHERE nom_club !="totaux"');//calcul du total des points
        $req = $bdd->prepare  ("UPDATE resultat_2013  SET $nom_sortie = :total   WHERE nom_club = :nom_club ");// ecriture du resultat dans le tableau
     
     //execution des requettes
        $nom_sotie ="randonnee_des_lutins"; // nom de la colonne
        $reponse-> execute (array(':nom_sortie'=>$nom_sortie));print_r($reponse->errorInfo());echo $nom_sotie; // execute le lecture pour une colonne
        $donnees = $reponse -> fetch(); // résultat de la lecture 
        $req->execute(array(':total' => $donnees['points'], ':nom_club'=>"totaux"));echo $donnees['points']; // execute ecriture des points pour une colonne
        $reponse->closeCursor();$req->closeCursor();
    et j'ai la réponse suivante:
    Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=NULL AS points FROM resultat_2013 WHERE nom_club !="totaux"' at line 1 ) randonnee_des_lutins
    Il y a certainement des erreurs dans les cotes ou ":" , mais je ne trouvepas.
    Pouvez vous m'aider
    Merci
    Syldupas

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    J'ai trouvée une erreur $nom_sortie alors que j'avais écri $nom_sotie.
    Maintenant j'ai le résultat suivant
    Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '='randonnee_des_lutins' AS points FROM resultat_2013 WHERE nom_club !="totaux"' at line 1 )
    syldupas

  13. #13
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 60
    Points
    60
    Par défaut
    l'erreur c'est lors de select ou update?

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Points : 138
    Points
    138
    Par défaut
    essaye ça:

    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
     
    //Préparation des requettes
    $reponse = $bdd->prepare("SELECT SUM(:nom_sortie) FROM resultat_2013 WHERE nom_club != 'totaux' "); //calcul du total des points
    $req = $bdd->prepare ("UPDATE resultat_2013 SET :nom_sortie = :total WHERE nom_club = 'totaux' ");// ecriture du resultat dans le tableau
     
     
    //execution des requettes
     
    // a remplacer par array
    $nom_sortie = "randonnee_des_lutins"; // nom de la colonne
     
    // debut de boucle possible ici
     
    $reponse->bindValue(':nom_sortie', $nom_sortie, PDO::PARAM_STR);
    $reponse->execute();
    $total = $reponse -> fetch();
    $req->bindValue(':nom_sortie', $nom_sortie, PDO::PARAM_STR);
    $req->bindValue(':total', $total, PDO::PARAM_STR); // ou PARAM_INT
    $req->execute();
     
    //fin de boucle
    je ne garantie pas que ça marche


    maintenant je pense que tu as mal organisé ta base de données

    tu aurai du faire une table nommée resultat

    avec les colonnes suivantes:

    0. id (numéro id auto incrementé)
    1. annee
    2. nom_sortie
    3. nom_club
    4. points
    5. autres info ??
    6...


    Les données parraissent mélangées a premiere vue comparé a ta table façon Excel mais ça permet a l'aide d'une seule requete ensuite de pouvoir recupérer facilement les infos qui t'interressent au moment des les afficher.

    Avec une table comme ça tu peut faire une requete qui calcul tous les totaux de chaque sortie et te renvoie un tableau avec le nom de la sortie, le total correspondant et meme le nom du club qui a le plus de points pour chaque sortie.

    Et ça evite aussi de modifier ta table en ajoutant une nouvelle colonne a chaque nouvelle sortie, tu y ajoute juste des données.

    Après si tu tiens a stocker le total de chaque sortie dans ta base de données, crée une nouvelle table avec:

    0 id
    1 nom_sortie
    2 annee ?? (si meme sortie tous les ans)
    3 total

    ensuite tu pourra lier les 2 tables et faire des requetes "compliquées" pour afficher ce qui t'interresse.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Merci pour la réponse.
    C'est la première base de données que je crée sur PhpMyAdmin
    Cette partie du site est hébergé chez OVH.
    Ma base de données est organisée de la façon suivante:
    Une table des club de toute la Vendée, une table du calendrier par année
    , une table des résultat par année, et 26 tables, une par sortie inscrite au calendrier.
    Le but de cette partie du site est de permettre au président du club organisateur d'une sortie, de documenter un tableau directement en ligne.
    Le gestionnaire de la Vendée, vérifie ce tableau et le valide. Après validation, le résultat de la sortie est chargé dans le tableau des résultats annuel qui peut étre affiché par le gestionnaire.
    En fin d'année, le challenge est attribué au club qui a participé au plus grand nombre de sorties.
    Tous fonctionne très bien, mais je voulais totaliser le nombre de points par sortie pour comparer visuellement au tableau créé par exel.
    Syldupas

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    N’ayant pas trouver de réponse sur le forum, je vais changer de méthode.
    Après chaque saisie de tableau, je vais faire le total et l'écrire dans le tableau des résultats annuel.
    C'est moins bien mais je n'ai pas trouvé d'autre solution à part faire une usine à gaz.
    Merci pour votre aide
    Syldupas

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/11/2011, 06h40
  2. Réponses: 3
    Dernier message: 29/03/2011, 21h38
  3. [Toutes versions] Publispostage "enregistrement suivant" vers une colonne et non une ligne
    Par alshjv dans le forum Word
    Réponses: 3
    Dernier message: 10/03/2011, 16h20
  4. Créer de nouvelles colonnes à partir d'une ligne
    Par julien4 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/10/2007, 13h33
  5. MySQL sur une ligne
    Par codefalse dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/05/2007, 16h22

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