Probleme avec fonction SELECT SUM... LIMIT

cco
Petit nouveau ! | 4 Messages

03 nov. 2006, 12:41

J'ai une table qui contient un champs temps de type "time"

J'aimerais extraire les x premiers enregistrements et additionner le champ temps.

Si je fais SELECT SUM(temps) FROM bd LIMIT 0,x

la fonction me retourne la somme de TOUTE la table, comme si elle ne tenait pas compte de LIMIT.

Si je prends directement les enregistrements "SELECT temps FROM bd LIMIT 0,x" ils sont bien filtrés, donc dans ce cas la fonction LIMIT marche.

Est-ce que SUM est incompatible avec LIMIT ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 nov. 2006, 13:30

Ce n'est pas "incompatible", mais ce n'est effectivement pas adapté à ce que tu veux faire. L'instruction LIMIT n'intervient qu'à la fin du traitement pour filtrer le nombre de résultat retournés.

Tu peux donc sois le décomposer en une sous requête (si ta version de mysql le permet) :

Code : Tout sélectionner

SELECT SUM(...) FROM (SELECT ... LIMIT ... )
Soit utiliser les conditions WHERE/AND pour que ta requête (et donc ta somme) ne porte que sur les lignes qui t'interessent :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

cco
Petit nouveau ! | 4 Messages

03 nov. 2006, 18:15

La version de MySql et en effet 3.25.

Selon ta suggestion j'ai donc bricolé avec des WHERE et ai du ajouter une colone index, incrémentée automatiquement.

Ca donne finalement ça

Code : Tout sélectionner

SELECT SUM(time) FROM db WHERE index < (x+1)
tant que les saisies se font chronologiquement ça fonctionne.

Merci beaucoup.