Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mysql et procédure de màj

1 réponse
Avatar
Roumégou Eric
Bonjour,

j'ai besoin de remonter la somme d'un détail au niveau d'une table (en
2 mot le solde d'un compte correspondant à la somme de mouvements)

J'ai besoin que cette info soit calculée au niveau de la table car cela
me sert ensuite dans un générateur de requête; donc le calculer par
jointure serait trop complexe.

J'ai donc rajouté une colonne à ma table
et mon idée était de sortir la requete d'update toute faite

select concat('update people set wrk_solde=',sum(bnk_signed),' where
ppl_id=',people_bank.ppl_id) as sqlmaj from people_bank inner join
people on people_bank.ppl_id=people.ppl_id where people_bank.bnk_type
not in(8,9)
and lvl_id=1363
group by people_bank.ppl_id

Quelques 1032 ms pour me retourner 13000 lignes d'update, mais ensuite
les updates prennent vraiment trop de temps.

Donc mes questions :

- en mySQL 4.2.22 (attention pas en 5 !) serait-il possible de faire
une procédure stockée ?
si oui quel serait le code ?

- y'aurait-il moyen de faire cela en une requête ?
- le bulk insert n'aurait-il pas une correspondance pour faire du bulk
update ?

Merci de vos réponses.

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)

1 réponse

Avatar
Roumégou Eric
je me réponds (mais les proc stockées en 4.22 ça existent ? ça
m'interresse)

Avec ce script

drop table if exists tmp_solde;
create table tmp_solde
select people_bank.ppl_id as ppl_id,sum(bnk_signed) as solde
from people_bank inner join people on people_bank.ppl_id=people.ppl_id
where people_bank.bnk_type not in(8,9)
and people.lvl_id3005 group by people_bank.ppl_id;
alter table tmp_solde add unique ppl_id (ppl_id);
update people, tmp_solde set people.wrk_solde = tmp_solde.solde where
people.ppl_id = tmp_solde.ppl_id;
drop table if exists tmp_solde;

je prends qq secondes au lieu des 10mn Ouf !



Roumégou Eric avait prétendu :
Bonjour,

j'ai besoin de remonter la somme d'un détail au niveau d'une table (en 2 mot
le solde d'un compte correspondant à la somme de mouvements)

J'ai besoin que cette info soit calculée au niveau de la table car cela me
sert ensuite dans un générateur de requête; donc le calculer par jointure
serait trop complexe.

J'ai donc rajouté une colonne à ma table
et mon idée était de sortir la requete d'update toute faite

select concat('update people set wrk_solde=',sum(bnk_signed),' where
ppl_id=',people_bank.ppl_id) as sqlmaj from people_bank inner join people on
people_bank.ppl_id=people.ppl_id where people_bank.bnk_type not in(8,9)
and lvl_id63
group by people_bank.ppl_id

Quelques 1032 ms pour me retourner 13000 lignes d'update, mais ensuite les
updates prennent vraiment trop de temps.

Donc mes questions :

- en mySQL 4.2.22 (attention pas en 5 !) serait-il possible de faire une
procédure stockée ?
si oui quel serait le code ?

- y'aurait-il moyen de faire cela en une requête ?
- le bulk insert n'aurait-il pas une correspondance pour faire du bulk update
?

Merci de vos réponses.



--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)