Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/04/2006, 13h35   #1
Invité de passage
 
Inscription : avril 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 6
Points : 0
Points : 0
Envoyer un message via MSN à Stabbquadd
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 :
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 :
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 :
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 !
Stabbquadd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2006, 19h37   #2
Membre habitué
 
Inscription : février 2006
Messages : 118
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 118
Points : 116
Points : 116
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!
yizashi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2006, 20h00   #3
Invité de passage
 
Inscription : avril 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 6
Points : 0
Points : 0
Envoyer un message via MSN à Stabbquadd
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 !
Stabbquadd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2006, 23h09   #4
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2006, 00h54   #5
Invité de passage
 
Inscription : avril 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 6
Points : 0
Points : 0
Envoyer un message via MSN à Stabbquadd
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
- ...

???
Stabbquadd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2006, 10h06   #6
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h22.


 
 
 
 
Partenaires

Hébergement Web