PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 27-07-2014 17:09:28

PandadeMios
Membre
Inscription : 01-06-2013
Messages : 15

Problème de requête UPDATE

Bonsoir à tous,

Je cherche depuis quelque temps la solution à ce problème,

Ma requête modifie plusieurs lignes grâce à une chaîne

j’aimerai qu'a chaque inscription il rajoute 1 à la variable $num_ins

exemple : première ligne modifiée 1-inscription, deuxième 2-inscription etc..... avec un maximum de 5-inscription

voila ma requête

$num_ins = 1,2,3,4,5;
$query = 'UPDATE panier_espace_adherent SET nbre_inscription = "('.$num_ins.')-inscription" WHERE id IN ('.$id_ligne.')';

Voila, merci de votre aide
et bonne soirée

Hors ligne

#2 27-07-2014 22:05:55

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème de requête UPDATE

Saluton,

Tu peux reformuler le besoin de manière intelligible parce que là je n'ai strictement  rien compris.

Un jeu d'essai avec les valeurs de départ et les valeurs attendues serait assez éclairant, me semble-t-il.

@mike.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 28-07-2014 08:38:08

PandadeMios
Membre
Inscription : 01-06-2013
Messages : 15

Re : Problème de requête UPDATE

Bonjour @mike et merci de ta réponse

Je mets à jour une table avec UPDATE et une chaîne des numéros de ligne (id) avec un maximum de 5 lignes a la fois

exemple :
$query = 'UPDATE panier_espace_adherent SET nbre_inscription = "1-inscription" WHERE id IN 2,5,8,9';

Cela fonctionne très bien.

Sauf que j'aimerai que dans le champs (nbre_inscription) il y est :
ligne 2 = 1-inscription
ligne 5 = 2-inscription
ligne 8 = 3-inscription
ligne 9 = 4-inscription

Bonne journée
Seb

Hors ligne

#4 28-07-2014 09:00:30

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Problème de requête UPDATE

Bonjour,

Ce que vous voulez faire est tellement capillotracté (pour reprendre une expression à notre ami MK) que vous-même n'avez pas compris ce que vous avez fait.
Donc exprimé en vos termes il vous faudrait faire :


$num_ins = 1,2,3,4,5;
$query = 'UPDATE panier_espace_adherent SET nbre_inscription = nbre_inscription+1 WHERE id IN ('.$num_ins.')';
 

Mais pour cela faut-il encore que nbre_inscription soit du type integer et non varchar, car comme le nom de colonne associé l'indique il s'agit d'un nombre et pas d'une chaîne.

Maintenant vous avez un sérieux problème de sémantique et de modèle!!! : Comment un nombre d'inscription peut se retrouver dans un panier adhérent? avec votre "WHERE id IN" qui appelle une énumération d'id, comment pouvez-vous mettre à jour le panier d'un adhérent connecté en modifiant le panier de plusieurs adhérents???

Je vous invite sérieusement à revoir la conception de votre modèle de données.

Attention aussi une clé primaire d'entité n'a rien à voir avec un id de ligne au niveau sémantique.

Cordialement,

Jc.

Dernière modification par Jc (28-07-2014 09:03:22)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 28-07-2014 09:08:13

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème de requête UPDATE

Non-obstant la pertinentissime soufflante que vient de t'administrer l'ami Jc, essaye peut-être ceci, juste pour voir (et que je n'aie pas cogité pour des prunes) :

UPDATE panier_espace_adherent SET nbre_inscription = CONCAT(FIND_IN_SET(id,'2,5,8,9'),"-inscription") WHERE id IN (2,5,8,9)';

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 28-07-2014 09:28:36

PandadeMios
Membre
Inscription : 01-06-2013
Messages : 15

Re : Problème de requête UPDATE

Bonjour JC,

Je m'occupe d'une association sportive et du site internet(en construction), le champ (nbre_inscription) sert par la suite au calcul de la cotisation annuelle,

car le tarif est dégressif avec plusieurs inscriptions (max 5) de la même famille en même temps.

Je peux très bien inscrire dans ce champ que du numérique.

En amont j'affecte un code client commun à toute la famille

Je veux juste l'attribution d'un numéro croissant de 1 dans le champs (nbre_inscription) au moment de la validation des inscriptions par mes soins.

Cordialement
Seb

Hors ligne

#7 28-07-2014 10:30:16

PandadeMios
Membre
Inscription : 01-06-2013
Messages : 15

Re : Problème de requête UPDATE

Je prends note des remarques de JC et Merci @mike pour ta proposition

UPDATE panier_espace_adherent SET nbre_inscription = CONCAT(FIND_IN_SET(id,'2,5,8,9'),"-inscription") WHERE id IN (2,5,8,9)';

Cela fonctionne très bien dans cette configuration quand le numéro inscription correspond au numéro de la ligne id
il me marque (2-inscription sur la ligne 2 - 5-inscription sur la ligne 5) etc

Alors que j'aimerai juste qu'il me marque (1-inscription sur la ligne 2 / 2-inscription sur la ligne 5 / 3-inscription sur la ligne 8) etc,
il peut avoir jusqu'a 5 lignes lors de la validation par mes soins des demandes d'inscriptions.

Je veux juste l'attribution d'un numéro croissant de 1 en partant de 1 dans le champs (nbre_inscription).

Ce champ servira par la suite au calcul pour la même famille de la cotisation le 1 paye temps, le 2 un peu moins, le 3 encore moins et un si de suite le 5 paye pas.

Merci à vous
Seb

Hors ligne

#8 28-07-2014 12:25:25

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Problème de requête UPDATE

Bonjour,

Wow voilà que de la complication se rajoute à de la complication..
On arrive à un stade où vous seul êtes en mesure de comprendre ce que vous dites. Nous ne sommes pas des devins, et j'ai bien peur que cette phrase

Ce champ servira par la suite au calcul pour la même famille de la cotisation le 1 paye temps, le 2 un peu moins, le 3 encore moins et un si de suite le 5 paye pas.

vienne de nous donner le coup de grâce.

Jc.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#9 28-07-2014 17:48:54

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème de requête UPDATE

Ouais Jc, je te comprends.

@PandadeMios. Bizarre, FIND_IN_SET, est censée retourner non pas l'occurrence trouvée dans le jeu (SET) mais sa position (offset) dans le jeu ou 0 si elle n'y est pas trouvée.

Donc pour '2' elle devrait retourner 1 pour '5' =>2, pour '8'=>3 et pour '9'=>4. Ce qui est bien ce que tu souhaites.

Doc MySQL a écrit :

FIND_IN_SET(str,strlist)

Retourne une valeur de 1 à N si la chaîne str se trouve dans la liste strlist constituée de N chaînes. Une liste de chaîne est une chaîne composée de sous-chaînes séparées par une virgule ‘,’. Si le premier argument est une chaîne constante et le second, une colonne de type SET, la fonction FIND_IN_SET() est optimisée pour utiliser une recherche binaire très rapide. Retourne 0 si str n'est pas trouvé dans la liste strlist ou si la liste strlist est une chaîne vide. Retourne NULL si l'un des arguments est NULL. Cette fonction ne fonctionne pas correctement si le premier argument contient une virgule ‘,’ :

mysql> SELECT FIND_IN_SET('b','a,b,c,d');
        -> 2

Maintenant, quant à la pertinence de la démarche, je reste aussi atterré que l'ami Jc.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#10 29-07-2014 09:47:05

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Problème de requête UPDATE

Bonjour,

Je vais apporter un complément d'information qui va expliquer aussi pourquoi je comprends encore moins ce que le FIND_IN_SET pourrait apporter comme solution au problème posé.
Pour ce faire, et avant de parler de la méthode FIND_IN_SET, je pense qu'il est important de comprendre que la méthode repose sur la structure d'une colonne de type SET qui est une colonne gérée en binaire et qui accepte la gestion de valeur multiples.
Ainsi pour une colonne de type SET acceptant les valeurs ('2,5,8,9') les indexs de stockage en interne seront : 2=>1, 5=>2, 8=>4, 9=>8  donc 1,2,4,8 et non pas 1,2,3,4 (on est en binaire donc en puissance de 2 en décimal). Pourquoi? car cela permet de stocker les associations. Ainsi si la colonne a pour valeur le doublet ('2,5'), la colonne stockera sur l'index 3 (1+2), et si le doublet a pour valeur ('5,8'), l'index sera de 6 (4+2).

Donc pour moi le fait que FIND_IN_SET ne résolve pas le problème posé me rassure quelque part.. mais bon cela n'aide pas à comprendre le modèle, la logique et la structure de données de notre ami.

++

PS: Plus précisément on est sur une suite géométrique de raison 2 et de premier terme 0.

Dernière modification par Jc (29-07-2014 09:50:37)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#11 29-07-2014 17:19:09

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème de requête UPDATE

Bon OK, mais l'exemple de la doc est vraiment mal choisi.

Et comme ça

UPDATE panier_espace_adherent
SET nbre_inscription = CONCAT(FIELD(id,'2','5','8','9'),"-inscription")
WHERE id IN (2,5,8,9)';

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#12 06-03-2015 05:48:15

janway
Membre
Inscription : 06-03-2015
Messages : 1

Re : Problème de requête UPDATE

Re,
J'ai reçu quelques autres témoignages. Bizarrement, le mr a évité d'envoyer ça aux modérateurs, comme par hasard...
Je suis en train de chercher quelles suites donner a ce problème.
@+


Join online Testking security+ certification and testking to pass exam istqb certification in first try. Our best quality and Northwestern University guide you well for real exam.

Hors ligne

Pied de page des forums