Mise à jour en utilisant plusieurs JOIN dans MySQL/Python
P粉512526720
P粉512526720 2023-09-12 21:19:12
0
1
602

Le premier lot de questions a été jugé trop similaire à un autre message (ce n'était pas le cas) et fermé... j'ai donc fait une autre tentative ici, j'espère mieux formulée cette fois.

Un peu de contexte : nous avons une relation ici. Les titres (pièces) + les devises (pièces de base) forment une paire. Une paire et un courtier forment un atout (je traite chaque courtier/paire comme un atout spécifique)

J'ai également une table de change qui stocke les taux de change en temps réel.

Dans ma table d'historique des transactions (history_price), il y a une colonne qui contient beaucoup de NULL (volume en euros), que je calcule en fonction du volume. Ce que je veux faire, c'est le remplir, et pour ce faire, je dois (pour chaque ligne NULL) :

Voici comment je segmente la requête :

1-Trouver la devise

SELECT `history_price`.`param_basecoin`.`Symbol` FROM `history_price`.`param_asset` INNER JOIN `param_pair` ON `history_price`.`param_asset`.`id_pair` = `history_price`.`param_pair`.`pair_id` INNER JOIN `history_price`.`param_basecoin` ON `history_price`.`param_pair`.`Coin2_id` = `history_price`.`param_basecoin`.`basecoin_id` WHERE `history_price`.`param_asset`.`Ticker` LIKE '???'

2-Trouver les taux de change

SELECT `Rate` FROM `history_price`.`param_forex` WHERE `Coin` LIKE '???' AND `Basecoin` LIKE 'EUR'

3-Mise à jour de la colonne Euro

UPDATE `history_price` SET `history_price`.`eur_v` = (`history_price`.`Basecoin_v` * ???) WHERE `history_price`.`eur_v` IS NULL

4- Insérez 2 dans 3

UPDATE `history_price` SET `history_price`.`eur_v` = (`history_price`.`Basecoin_v` * (SELECT `Rate` FROM `history_price`.`param_forex` WHERE `Coin` LIKE '???' AND `Basecoin` LIKE 'EUR')) WHERE `history_price`.`eur_v` IS NULL

5- Insérez 1 dans 4

UPDATE `history_price` SET `history_price`.`eur_v` = (`history_price`.`Basecoin_v` * ( SELECT `Rate` FROM `history_price`.`param_forex` WHERE `Coin` LIKE ( SELECT `history_price`.`param_basecoin`.`Symbol` FROM `history_price`.`param_asset` INNER JOIN `param_pair` ON `history_price`.`param_asset`.`id_pair` = `history_price`.`param_pair`.`pair_id` INNER JOIN `history_price`.`param_basecoin` ON `history_price`.`param_pair`.`Coin2_id` = `history_price`.`param_basecoin`.`basecoin_id` WHERE `history_price`.`param_asset`.`Ticker` LIKE `history_price`.`Ticker` ) AND `Basecoin` LIKE 'EUR' ) ) WHERE `history_price`.`eur_v` IS NULL;

Cela fonctionne, mais trop lent... Existe-t-il un moyen de l'optimiser et de le rendre plus rapide ?

P粉512526720
P粉512526720

répondre à tous (1)
P粉105971514

UtilisezJOINau lieu de la sous-requête corrélée.

UPDATE history_price AS hp JOIN param_asset AS pa ON pa.Ticker = hp.Ticker JOIN param_pair AS pp ON pp.id_pair = pa.id_pair JOIN param_basecoin AS pb ON pb.basecoin_id = pp.Coin2_id JOIN param_forex AS pf ON pf.Coin = pb.Symbol SET hp.eur_v = hp.Basecoin_v * pf.Rate WHERE pf.Basecoin = 'EUR' AND hp.eur_v IS NULL
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!