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

SQL Procédural MySQL Discussion :

UPDATE conditionnelle


Sujet :

SQL Procédural MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut UPDATE conditionnelle
    Bonjour à tous,

    Voilà, je me pose deux petites questions que je vais vous exposer.

    J'ai une table, contenant disons (id,champ1,champ2,...,champ30)
    Si je veux soustraire 1 à tous ces champs sauf l'id bien entendu, je suis dans l'état actuel de mes connaissances obligé de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE table SET champ1=(champ1-1), champ2=(champ2-1),..., champ30=(champ30-1)

    Voici mes deux questions :

    N'est-il pas possible, puisque j'effectue exactement la même opération sur tous les champs, de résumer ceci en une phrase plus simple du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE table SET *=(*-1) EXCEPT table.id
    Si jamais un champ atteint 0, une soustraction lui fera faire le "tour du cadran" et il se retrouvera à 255 pour une TINYINT par exemple. De plus, j'aimerais que mes champs ne descendent pas en dessous d'une certaine valeur, comme 1 ou 10. Dans ce cas, est-il possible de faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE table SET *=(*-1) EXCEPT table.id AND table.*<=1

    Bien entendu mon code ne veut rien dire tel quel, mais j'ai beau fouiller la doc MySQL, je ne trouve pas mon bonheur :s

    Merci à tous les lecteurs de ce sujet !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 124
    Points : 159
    Points
    159
    Par défaut
    Je ne connais pas d'autres solutions, mais par contre je trouve un peu étrange de devoir faire ce type de requête.

    Tu gères quoi comme données si c'est pas indiscret? Peut-être que si tu refaisais ton modèle t'aurais pas ce problème.

    Bonne chance!

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    En fait il s'agit d'un jeu de rôle. Les joueurs ont un certain niveau de diverses qualifications, mais lorsqu'elle ne sont pas utilisées, ces compétences se perdent.
    Ma seule autre solution serait de stocker la dernière utilisation de chaque compétence, et de diminuer celle-ci en fonction lorsqu'elle est utilisée, mais le problème est que la feuille de personnage ne prendrait pas en compte ces micro-changements réguliers. Il faudrait alors utiliser TOUTES les compétences pour être sûr de les avoir à jour (et encore) ce qui est impossible techniquement.

    Du coup je vais devoir récupérer tous les champs, puis avec une boucle PHP diminuer chaque champ étant supérieur à ma valeur minimum, et enfin tous les remettre en bdd. Ca fait beaucoup de calculs pour pas grand chose, surtout si toutes les compétences sont à zéro par exemple.

    Une autre solution serait de stocker toutes les compétences séparément, ce qui multiplierait par 30 (pour l'instant) le nombre d'enregistrements... et une base de données n'est théoriquement pas faite pour stocker toutes les valeurs séparément, c'est justement tout l'intéret de la chose :s

    Bref, je suis complètement bloqué, c'est dommage, je suis certain qu'il y a une solution : c'est pas possible qu'avec mon niveau médiocre en programmation je me heurte déjà aux limites du language !
    Si quelqu'un avait une idée, je lui en serait excessivement reconnaissant !

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 316
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 316
    Points : 15 651
    Points
    15 651
    Par défaut
    Citation Envoyé par Stabbquadd
    et une base de données n'est théoriquement pas faite pour stocker toutes les valeurs séparément, c'est justement tout l'intéret de la chose :s
    si justement, tu devrais avoir une table "Compétance" avec les champs suivants par exemple :
    - identifiantCompetance
    - identifiantPj
    - nomCompetance
    - valeurCompetance

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Dans ce cas pourquoi ne pas faire un fichier texte nommé $idperso$idcompetence.bin contenant juste la valeur (puisque le nom de la compétence est selon la valeur).

    Et puis pour les champs login et motdepasse faut que je fasse une table avec :
    - idcompte
    - typedevaleur
    - valeur

    et comme ca Super ! j'ai séparé mes valeurs !
    Il me reste plus qu'à récupérer le login, l'utiliser pour en déduire l'id du compte, puis récupérer le mot de passe correspondant, le comparer avec le mot de passe entré par le visiteur, et si c'est pareil, alors j'ouvre la session !

    Tu es sûr de ce que tu dis ?
    Parce que ca me parait légèrement.. comment dire... "étrange", en espérant que mon post ne sera pas vexant.
    Je n'ai, personnellement hein, mais je ne connais peut-être que des dizaines de développeurs stupides, jamais entendu parler d'une utilisation de base de données dans laquelle on séparait toutes les valeurs à priori.
    J'ai entendu des tonnes de recommendations sur "ne jamais mettre SELECT *", ou "toujours mettre LIMIT 1", ou des tas de choses de ce genre, mais jamais de "les caractéristiques de ton enregistrement doivent toutes êtres stockées séparément", non, jamais.

    Pour prendre un exemple parfaitement bateau, une bibliothèque doit-elle utiliser une base de donnée de type :
    - idlivre
    - idcaractéristique
    - caractéristique

    ou plutôt :
    - idlivre
    - titrelivre
    - auteurlivre
    - annéelivre
    - ...

    ???

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 316
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 316
    Points : 15 651
    Points
    15 651
    Par défaut
    Citation Envoyé par Stabbquadd
    Pour prendre un exemple parfaitement bateau, une bibliothèque doit-elle utiliser une base de donnée de type :
    - idlivre
    - idcaractéristique
    - caractéristique

    ou plutôt :
    - idlivre
    - titrelivre
    - auteurlivre
    - annéelivre
    - ...

    ???
    ce n'est pas la même chose parce que là les informations "titre", "année", etc ne sont pas du même type
    si par exemple pour un "Livre" tu as plusieurs personnes comme par exemple l'auteur et le traducteur, là tu auras les tables suivantes par exemple :
    Livre
    - idLivre
    - titreLivre
    - anneeLivre

    LivrePersonne (la clé primaire est sur "idLivre" et "idPersonne")
    - idLivre
    - idPersonne
    - typeLivrePersonne (auteur, traducteur, ...)

    Personne
    - idPersonne
    - nomPersonne
    - prenomPersonne

    La règle principale est de ne pas avoir de données en double. Là si la même personne est auteur d'un livre et traductrice d'un autre, c'est personne apparait une seule fois dans la table Personne

Discussions similaires

  1. UPDATE conditionnel entre 2 tables
    Par maestro1303 dans le forum Requêtes
    Réponses: 15
    Dernier message: 03/02/2014, 15h54
  2. Optimiser un update conditionnel
    Par awalter1 dans le forum SQL
    Réponses: 1
    Dernier message: 01/02/2013, 08h03
  3. Division d'un update conditionnel.
    Par ptiboua dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/10/2007, 09h14
  4. update conditionnel sous oracle
    Par piment dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2007, 13h48
  5. [Access ] Requete conditionnel dans un UPDATE??
    Par nicko5959 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 28/06/2006, 05h39

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