Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
763 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème exécution de deux requettes simultanée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème exécution de deux requettes simultanée

n°1308107
mc_cut_kil​ler
Posté le 17-02-2006 à 15:19:16  profilanswer
 

Bonjour à tous,
 
je bloque actuellement sur un problème (simple à résoudre  :pt1cable: ?) concernant l'exécution de deux requettes.
 
Je trouvail sur une table cote numérotée. Du genre cote no.1 ... no.n, j'ai rajouté deux boutons pour pouvoir monter au descendre les cotes en changeant leur no.  
Théroriquement c'est simple : si l'utilisateur veut que la cote no.1 devient la no.2 il clique sur le bouton de la fleche qui descent donc : il faut ajouter +1 au no.1 qui devient 2 et inversement -1 au no.2 qui devient 1.
 
Voici mon script :

Code :
  1. /* on ajoute +1 à la cote en cour */
  2.      $query1 = "UPDATE p_cotes SET no_cote = ($no_cote +1) WHERE produit_id LIKE '$produit_id' AND no_cote LIKE '$no_cote'";
  3.      $result1 = mysql_query($query1)
  4.    or die ("Erreur dans la descente de numéro côte type e1" ); 
  5.  
  6.     /* on enleve -1 à la cote suivante */
  7.     $query2 = "UPDATE p_cotes SET no_cote = '$no_cote' WHERE produit_id LIKE '$produit_id' AND no_cote LIKE ($no_cote +1)";
  8.     $result2 = mysql_query($query2)
  9.   or die ("Erreur dans la descente de numéro côte type e2" ); 
  10.     redirect("index.php?action=gestion.cotes&produit=$produit_id", 0);


 
Si j'exécute les requettes séparément pas de problème, mais dès que je les ajoutes ca marche plus ... j'obtient toujours le meme resultat, le même numéro de cote !  :ouch:  
 
Quelqu'un pourais me donner une petite soluce ???

mood
Publicité
Posté le 17-02-2006 à 15:19:16  profilanswer
 

n°1308113
anapajari
s/travail/glanding on hfr/gs;
Posté le 17-02-2006 à 15:22:41  profilanswer
 

deux choses:
- tu fais +1 à la cote X ( celle-ci devient donc X'=X+1) et ensuite tu fais -1 à la cote qui vaut X+1 soit X'
- c'est normal que ça soit des strings tes cotes et pas des int?

n°1308118
dwogsi
Défaillance cérébrale...
Posté le 17-02-2006 à 15:24:10  profilanswer
 

Tu met temporairement un des id à -1 (théoriquement tu dois pas avoir -1 dans ta bdd).

n°1308130
mc_cut_kil​ler
Posté le 17-02-2006 à 15:29:48  profilanswer
 

- c'est normal que ça soit des strings tes cotes et pas des int?
Heu ... quel est la différence ?
 
Pour ce qu'il est des cotes, sur papier j'ai trouvé que pour une cote X le no. de celle-ci devient X+1
Par la suite la cote suivante no. X+1 son no devient X-1
 
Un exmple concret : descente de la cote 1 en 2
- le no de la cote 1 devient X+1 donc 2
- le no de la cote 2 devient X-1 donc 1
Vue que les cotes sont classées par no., la cote deux serait donc bien à la place de la 1.
 
Je sais pas ou je me trompe, mais ca fait deux heures que j'essaye n'importe qu'elle technique et le resultat est le meme. J'ai meme essayé de passer le no. de cote en cour et celui suivant dans l'url pour m'en reservir dans les requettes mais rien n'y fait ... :(

n°1308132
mc_cut_kil​ler
Posté le 17-02-2006 à 15:31:25  profilanswer
 

Tu met temporairement un des id à -1 (théoriquement tu dois pas avoir -1 dans ta bdd).
C'est ce que j'suis entrain de faire, mais j'aurais bien aimé savoir ou je m'étaits trompé avant, car oau début je pensais que ce serait simple !!!

n°1308150
anapajari
s/travail/glanding on hfr/gs;
Posté le 17-02-2006 à 15:40:54  profilanswer
 

mc_cut_killer a écrit :

- c'est normal que ça soit des strings tes cotes et pas des int?
Heu ... quel est la différence ?


la doc ça roxxe:
http://dev.mysql.com/doc/refman/4. [...] rview.html
http://dev.mysql.com/doc/refman/4. [...] rview.html
 
Quoi qu'il en soit, même s'en savoir ce quoi la différence, comment se fait-il que les deux requetes ne soit pas similaires?
 

mc_cut_killer a écrit :


Un exmple concret : descente de la cote 1 en 2
- le no de la cote 1 devient X+1 donc 2
- le no de la cote 2 devient X-1 donc 1


oui enfin la tu noteras bien que tu as 2 cotes qui valent 2 ...
Regarde j'ai les quotes X=1 et Y=2.
Tu fais X=X+1 => X=2
Ensuite
Pour la cote = 2 tu fais -1, d'accord mais la quote=2 c'est X ET Y


Message édité par anapajari le 17-02-2006 à 15:41:41
n°1308152
mc_cut_kil​ler
Posté le 17-02-2006 à 15:42:03  profilanswer
 

Voici, quelque chose qui marche en mettant temporairement -1 au no de tranche en cour :
 

Code :
  1. /* on met le no de cote à -1 pour la cote en cour */
  2.      $query1 = "UPDATE p_cotes SET no_cote = -1 WHERE produit_id LIKE '$produit_id' AND no_cote LIKE '$no_cote'";
  3.      $result1 = mysql_query($query1)
  4.    or die ("Erreur dans la descente de numéro côte type e1" ); 
  5.  
  6.     /* on met le no de cote en cour pour la suivante */
  7.     $query2 = "UPDATE p_cotes SET no_cote = '$no_cote' WHERE produit_id LIKE '$produit_id' AND no_cote LIKE ($no_cote +1)";
  8.     $result2 = mysql_query($query2)
  9.   or die ("Erreur dans la descente de numéro côte type e2" ); 
  10.    
  11.     /* on met le no de cote en cour + 1 au lieu de -1 */
  12.     $query3 = "UPDATE p_cotes SET no_cote = ($no_cote +1) WHERE produit_id LIKE '$produit_id' AND no_cote = -1";
  13.     $result3 = mysql_query($query3)
  14.   or die ("Erreur dans la descente de numéro côte type e3" );


 
Cela ne fait pas inpeu lourd ? Il existe pas un moyen plus simple pour obtenir ce resultat ?

n°1308157
anapajari
s/travail/glanding on hfr/gs;
Posté le 17-02-2006 à 15:46:19  profilanswer
 

et puis tu dois pouvoir tout faire en une seule requete un truc dans le genre

Code :
  1. UPDATE p_cotes SET no_cote = no_cote+1 - (no_cote-$no_cote)*2 WHERE produit_id LIKE '$produit_id' AND ( no_cote = $no_cote or no_cote=$no_cte+1)

n°1308160
mc_cut_kil​ler
Posté le 17-02-2006 à 15:48:03  profilanswer
 

Regarde j'ai les quotes X=1 et Y=2.
Tu fais X=X+1 => X=2
Ensuite
Pour la cote = 2 tu fais -1, d'accord mais la quote=2 c'est X ET Y

 
 
Effectivement, j'avais été un peu vite dans l'étude du problème.
J'ai fini par opté pour le mise à -1 temporaire du no de cote à descendre, car je ne voi pas comment faire en partant de l'autre principe.

n°1308166
mc_cut_kil​ler
Posté le 17-02-2006 à 15:54:01  profilanswer
 

Je viens d'essayer la requette au dessus de mon dernier poste de anapajari.
 
Celle-ci renvoie encore une fois le meme no pour les cotes concernées :( domage j'aurais bien aimez n'utiliser qu'une requette au lieu de 3!
 
Je vais essayer de trouver comme faire avec une requette, mais je croi bien que c'est au dessus de mes compétences :)

mood
Publicité
Posté le 17-02-2006 à 15:54:01  profilanswer
 

n°1308177
anapajari
s/travail/glanding on hfr/gs;
Posté le 17-02-2006 à 16:03:40  profilanswer
 

mc_cut_killer a écrit :

Je viens d'essayer la requette au dessus de mon dernier poste de anapajari.
 
Celle-ci renvoie encore une fois le meme no pour les cotes concernées :( domage j'aurais bien aimez n'utiliser qu'une requette au lieu de 3!
 
Je vais essayer de trouver comme faire avec une requette, mais je croi bien que c'est au dessus de mes compétences :)


Nan nan elle marche bien la requête :o
 
J'ai créé la table suivante pour tester:

Code :
  1. CREATE TABLE `cote` (
  2.  `no` int(11) NOT NULL,
  3.  `lib` varchar(2) NOT NULL
  4. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  5.  
  6. INSERT INTO `cote` VALUES (3, 'A');
  7. INSERT INTO `cote` VALUES (4, 'B');


 
Donc je me retrouve dans la table avec:

Citation :


no      lib
3        A
4        B


 
Ensuite je fais cette requete ( j'ai remplace ton $no_cote par 3 pour l'exemple):

Code :
  1. UPDATE cote SET no = no + 1 - (no-3)*2 WHERE no=3 OR no=3+1


 
et le contenu de ma table devient:

Citation :


no      lib
4        A
3        B


 

n°1308191
mc_cut_kil​ler
Posté le 17-02-2006 à 16:19:47  profilanswer
 

J'doi vraiment etre un bourrin lol
 
Moi ca marche pas, faut dire que je me contente d'utiliser des requettes simple pour l'instant  :sweat:  
 
Je vais garder ce post pour m'en servir lors d'une prochaine évolution.
Quoi qu'il en soit je vous remercie pour votre aide car maintenant ca marche, certes avec trois requettes mais bon ...
 
 
Moi j'utilise cette table, et $no_cote est récupéré dans l'url par un $_GET

Code :
  1. CREATE TABLE `p_cotes` (
  2.   `cote_id` mediumint(9) NOT NULL auto_increment,
  3.   `produit_id` mediumint(9) NOT NULL,
  4.   `no_cote` tinyint(4) NOT NULL,
  5.   `lib_controle` varchar(50) NOT NULL,
  6.   `cote_mini` decimal(15,6) NOT NULL,
  7.   `cote_maxi` decimal(15,6) NOT NULL,
  8.   `date_creation` int(11) NOT NULL,
  9.   `utilisateur_creation` varchar(15) NOT NULL,
  10.   `poste_creation` varchar(15) NOT NULL,
  11.   `date_modif` int(11) NOT NULL,
  12.   `utilisateur_modif` varchar(15) NOT NULL,
  13.   `poste_modif` varchar(15) NOT NULL,
  14.   PRIMARY KEY  (`cote_id`)
  15. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;


 
Avec ces trois valeurs de test :

Code :
  1. INSERT INTO `p_cotes` (`cote_id`, `produit_id`, `no_cote`, `lib_controle`, `cote_mini`, `cote_maxi`, `date_creation`, `utilisateur_creation`, `poste_creation`, `date_modif`, `utilisateur_modif`, `poste_modif`) VALUES (9, 2, 1, 'cote de test 1.0', 6.000000, 5.000000, 1139829613, 'utilisateur', '192.168.0.2', 1139830279, 'jeremie', '192.168.0.2');
  2. INSERT INTO `p_cotes` (`cote_id`, `produit_id`, `no_cote`, `lib_controle`, `cote_mini`, `cote_maxi`, `date_creation`, `utilisateur_creation`, `poste_creation`, `date_modif`, `utilisateur_modif`, `poste_modif`) VALUES (11, 2, 2, 'cote 2', 12.000000, 50.000000, 1140103831, 'utilisateur', '192.168.0.2', 1140103831, 'jeremie', '192.168.0.2');
  3. INSERT INTO `p_cotes` (`cote_id`, `produit_id`, `no_cote`, `lib_controle`, `cote_mini`, `cote_maxi`, `date_creation`, `utilisateur_creation`, `poste_creation`, `date_modif`, `utilisateur_modif`, `poste_modif`) VALUES (13, 2, 3, 'cote 3', 1.000000, 2.000000, 1140165347, 'utilisateur, '192.168.0.2', 1140165347, 'jeremie', '192.168.0.2');

n°1308213
anapajari
s/travail/glanding on hfr/gs;
Posté le 17-02-2006 à 16:49:30  profilanswer
 

nan nan même avec ta table ça marche :o
 

Code :
  1. SELECT cote_id, no_cote FROM p_cotes;
  2. code_id   no_cote
  3. 9            1
  4. 11           2
  5. 13           3


puis ( $no_cote=1 dans l'exemple)

Code :
  1. UPDATE p_cotes SET no_cote = no_cote+1 - (no_cote-1)*2 WHERE produit_id LIKE '%' AND ( no_cote = 1 OR no_cote=1+1)


enfin

Code :
  1. SELECT cote_id, no_cote FROM p_cotes;
  2. code_id   no_cote
  3. 9            2
  4. 11           1
  5. 13           3


Message édité par anapajari le 17-02-2006 à 16:50:21
n°1308222
mc_cut_kil​ler
Posté le 17-02-2006 à 16:57:53  profilanswer
 

Effectivement ca marche !  :D  
 
Encore falait-il que je pense à faire le premier select  :pfff:  
 
Du coup je te remercie vraiment pour ton aide, car ca fait carément plus propre et plus efficace que ma première technique  :jap:  
 
@bientot et bon week end ...  :sarcastic:

n°1311278
mc_cut_kil​ler
Posté le 22-02-2006 à 11:15:29  profilanswer
 

Bon je reviens sur mon problème :(
 
Effectivement j'ai cru que ca marchais et après mon petit week de 4 jours, je teste tranquilement et ... c'est le drame !
 
Voici la requette que j'utilise avec mes paramètres :

Code :
  1. $query = "UPDATE p_cotes SET no_cote = no_cote+1 - (no_cote-1)*2 WHERE produit_id LIKE '$produit_id' AND ( no_cote = $no_cote OR no_cote=($no_cote+1))";
  2.      $result = mysql_query($query)
  3.       or die ("Erreur dans la descente de numéro côte type e1" );


 
Lorsque je l'exécute une première fois, ca marche nickel la cote 1 obtient le no.2 et inversement pour la 2.
Par la suite je tente donc de déscendre la cote 1 devenue 2 en 3, et la ca marche plus du tout !
 
La cote 3 obtient le no. 0 et la cote 2 et 1 on toutes deux le numéro 1  :pt1cable:  
 
Je voie pas du tout où est le problème car je ne possède pas encore le niveau pour utiliser de telles requettes  :sweat:  
Alors sans abuser, si on pouvais m'indiquer l'érreur ca serait vraiment bien  :ange:

n°1311583
mc_cut_kil​ler
Posté le 22-02-2006 à 15:52:32  profilanswer
 

up! :)

n°1311639
omega2
Posté le 22-02-2006 à 16:39:11  profilanswer
 

"no_cote = no_cote+1 - (no_cote-1)*2"
C'est pas pour dire, mais cette partie me semble être basé sur un super cas particulié. En bref, en temps normal, ca ne marche pas.
 
En plus, la partie where de ta requette semble faite pour ne permette l'inversion que de deux éléments contigue.
 
 
En plus générique :  

  • tu commences par faire la somme des deux indices.
  • dans le "where", tu sélectionnes tes deux éléments.
  • dans le "set", tu soustraits l'indice actuel au nombre que t'as calculé au début.


Tu véras que comme ça, ca marchera trés bien et même si t'as besoin d'inverser des éléments trés éloigné, tu le feras sans rien avoir à changer.
 
PS : je te l'ai écrit sous forme d'algorythme, a toi de le coder sous forme d'une requette sql et d'un peu de php.
 
 
PS2 : Voilà les indices calculé par ta formule avec le calcul sous la forme : incide de départ => (indice de départ-1) - ((indice de départ+1)*2) = résultat
0 => 1 - (-2) =  3
1 => 2 - 0    =  2
2 => 3 - 2    =  1
3 => 4 - 4    =  0
4 => 5 - 6    = -1
4 => 6 - 8    = -2
....

Message cité 1 fois
Message édité par omega2 le 22-02-2006 à 16:45:17
n°1311671
mc_cut_kil​ler
Posté le 22-02-2006 à 17:11:20  profilanswer
 

OK, je regarde ca demain :)
 
Mais dans tout les cas l'inversion se fera toujours sous forme contigue. En fait j'ai ajouté deux images de fleches à la suite de l'apercu (une qui monte et qui descent), de cette façon l'inversion se fait toujours avec l'élément (le no.) du dessus, ou du dessous pour l'opération inverse.

n°1312100
anapajari
s/travail/glanding on hfr/gs;
Posté le 23-02-2006 à 12:06:34  profilanswer
 

omega2 a écrit :

"no_cote = no_cote+1 - (no_cote-1)*2"
C'est pas pour dire, mais cette partie me semble être basé sur un super cas particulié. En bref, en temps normal, ca ne marche pas.
En plus, la partie where de ta requette semble faite pour ne permette l'inversion que de deux éléments contigue.


Tout a fait cela ne marche que si les deux élements se suivent ... Sinon [:ratal]
Mais c'est comme ça que j'avais compris le problème! et c'est bien ce que semble dire mc_cut_killer.
 
Si ça merde c'est parce qu'à un endroit j'avais remplacé $no_cote par 1 et que tu as laissé 1, il fallait faire:

Code :
  1. UPDATE p_cotes SET no_cote = no_cote+1 - (no_cote-$no_cote)*2 WHERE produit_id LIKE '$produit_id' AND ( no_cote = $no_cote OR no_cote=($no_cote+1))


Et là tu n'auras plus (enfin ne devrais plus avoir) de problème.

n°1312885
mc_cut_kil​ler
Posté le 24-02-2006 à 11:07:27  profilanswer
 

Excelent  :sol:  
 
J'avais laissé un 1, du coup avec la dernière requette ca marche nickel  :wahoo:  
 
Un grand merci à anapajari pour son aide et sa patience ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème exécution de deux requettes simultanée

 

Sujets relatifs
Tomcat 5: Problème de point d'arrêtProblème en C et OpenGL
problème d‘authentificationProblème de mise en forme dynamique dans un tableau.
[DEVCPP]v.49810 problème telechargement[RESOLU] problème de condition
[VBnet] Problème avec un compteurProblème avec include
[ANT] Probleme de build.xmlProbléme streams.h
Plus de sujets relatifs à : Problème exécution de deux requettes simultanée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR