Compter rapidement dans une base externe

Bonjour à tous,

J’ai besoin de réaliser des calculs : additionner des nombres présent dans la même colonne d’une table d’une base MySQL externe (quelques milliers de ligne).
Je dois réaliser cette opération une cinquantaine de fois. Forcément, c’est long (5 à 10 secondes) donc j’ai mis ces infos dans une div ajax, pour ne la charger que si l’utilisateur en a besoin.

Ma boucle ressemble à ça :

<BOUCLE_compter_effeleves_public_ecoles(mabaseexterne:annuaire){where ‹ département ›=’75’>[(#GET{EFFELEVES_PUBLIC_ECOLES}|plus{#NOMBRE_D_ELEVES}|set{EFFELEVES_PUBLIC_ECOLES})]
</BOUCLE_compter_effeleves_public_ecoles>

J’ai vu qu’on pouvait faire cela bien plus simplement (et rapidement ??) directement dans la requête SQL, avec quelque chose qui ressemblerait à ça :
SELECT SUM(NOMBRE_D_ELEVES) FROM annuaire where ‹ département ›=’75’

Savez-vous s’il existe sur SPIP une commande plus efficace qu’une boucle qui tourne 3000 fois pour additionner les valeurs d’un champ ?

Sinon, comment intégrer cette fonction SUM de MySQL dans une boucle SPIP sur une base externe ?

Merci d’avance.


Julien Delmas

Julien Delmas a écrit le 21/03/2021 à 00:34 :

Bonjour à tous,

Bonjour,

J’ai besoin de réaliser des calculs : additionner des nombres présent dans la même colonne d'une table d’une base MySQL externe (quelques milliers de ligne).
Je dois réaliser cette opération une cinquantaine de fois. Forcément, c’est long (5 à 10 secondes) donc j’ai mis ces infos dans une div ajax, pour ne la charger que si l’utilisateur en a besoin.

Ma boucle ressemble à ça :

<BOUCLE_compter_effeleves_public_ecoles(mabaseexterne:annuaire){where 'département'=’75'>[(#GET{EFFELEVES_PUBLIC_ECOLES}|plus{#NOMBRE_D_ELEVES}|set{EFFELEVES_PUBLIC_ECOLES})]
</BOUCLE_compter_effeleves_public_ecoles>

J’ai vu qu’on pouvait faire cela bien plus simplement (et rapidement ??) directement dans la requête SQL, avec quelque chose qui ressemblerait à ça :
SELECT SUM(NOMBRE_D_ELEVES) FROM annuaire where 'département'=’75'

Savez-vous s’il existe sur SPIP une commande plus efficace qu’une boucle qui tourne 3000 fois pour additionner les valeurs d’un champ ?

Sinon, comment intégrer cette fonction SUM de MySQL dans une boucle SPIP sur une base externe ?

:wink:

--
RealET

Hello,

Tu peux utiliser les fonctions de l’api sql:
[(#VAL{spip_annuaire}|sql_countsel{departement=75,«  »,«  »,mabaseexterne})]

Stocker dans une var:

[(#SET{count,#VAL{spip_annuaire}|sql_countsel{departement=75,«  »,«  »,mabaseexterne}})]

#GET{count}

A tester! mais ça doit fonctionner.

Le dim. 21 mars 2021 à 08:41, RealET <real3t@gmail.com> a écrit :

Julien Delmas a écrit le 21/03/2021 à 00:34 :

Bonjour à tous,
Bonjour,

J’ai besoin de réaliser des calculs : additionner des nombres présent
dans la même colonne d’une table d’une base MySQL externe (quelques
milliers de ligne).
Je dois réaliser cette opération une cinquantaine de fois. Forcément,
c’est long (5 à 10 secondes) donc j’ai mis ces infos dans une div ajax,
pour ne la charger que si l’utilisateur en a besoin.

Ma boucle ressemble à ça :

<BOUCLE_compter_effeleves_public_ecoles(mabaseexterne:annuaire){where
‹ département ›=’75’>[(#GET{EFFELEVES_PUBLIC_ECOLES}|plus{#NOMBRE_D_ELEVES}|set{EFFELEVES_PUBLIC_ECOLES})]
</BOUCLE_compter_effeleves_public_ecoles>

J’ai vu qu’on pouvait faire cela bien plus simplement (et rapidement ??)
directement dans la requête SQL, avec quelque chose qui ressemblerait à
ça :
SELECT SUM(NOMBRE_D_ELEVES) FROM annuaire where ‹ département ›=’75’

Savez-vous s’il existe sur SPIP une commande plus efficace qu’une boucle
qui tourne 3000 fois pour additionner les valeurs d’un champ ?

Sinon, comment intégrer cette fonction SUM de MySQL dans une boucle SPIP
sur une base externe ?
https://contrib.spip.net/Bonux-pour-SPIP3#Balises-et-criteres-de-boucles

:wink:


RealET


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc

Bonsoir,

Merci à vous deux pour vos réponses. Il est dommage que cela ne soit pas nativement pris en charge par SPIP, j’ai donc installé Bonux et ma requête est maintenant un peu plus rapide (de l’ordre d’une à deux secondes).

Bonne soirée,


Julien Delmas

Le 21 mars 2021 à 08:40, RealET <real3t@gmail.com> a écrit :

Julien Delmas a écrit le 21/03/2021 à 00:34 :

Bonjour à tous,

Bonjour,

J’ai besoin de réaliser des calculs : additionner des nombres présent dans la même colonne d’une table d’une base MySQL externe (quelques milliers de ligne).
Je dois réaliser cette opération une cinquantaine de fois. Forcément, c’est long (5 à 10 secondes) donc j’ai mis ces infos dans une div ajax, pour ne la charger que si l’utilisateur en a besoin.
Ma boucle ressemble à ça :
<BOUCLE_compter_effeleves_public_ecoles(mabaseexterne:annuaire){where ‹ département ›=’75’>[(#GET{EFFELEVES_PUBLIC_ECOLES}|plus{#NOMBRE_D_ELEVES}|set{EFFELEVES_PUBLIC_ECOLES})]
</BOUCLE_compter_effeleves_public_ecoles>
J’ai vu qu’on pouvait faire cela bien plus simplement (et rapidement ??) directement dans la requête SQL, avec quelque chose qui ressemblerait à ça :
SELECT SUM(NOMBRE_D_ELEVES) FROM annuaire where ‹ département ›=’75’
Savez-vous s’il existe sur SPIP une commande plus efficace qu’une boucle qui tourne 3000 fois pour additionner les valeurs d’un champ ?
Sinon, comment intégrer cette fonction SUM de MySQL dans une boucle SPIP sur une base externe ?

https://contrib.spip.net/Bonux-pour-SPIP3#Balises-et-criteres-de-boucles

:wink:


RealET


liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l’aide à toute heure : http://spip.net/irc