mysql : requête entre plusieurs lignes N, N-1, N-2, etc... - SQL/NoSQL - Programmation
Marsh Posté le 23-06-2004 à 09:26:18
Salut,
Etant donné que tu as visiblement plusieurs types de conditions ( peut etre dans la meme page ), le plus simple serait de charger tous le contenu de la table ( si celle ci n'est pas trop grosse) dans un tableau ( ou un objet ) via un select.
Ensuite tu pourra plus facilement opéré les conditons, car les tableaux se prètent bien à ces manipulations en index.
De plus, je ne suis pas sur que cela soit tres simple de faire ceci en mysql
Pierre
Marsh Posté le 23-06-2004 à 09:44:51
En fait, au début, juste une condition m'intéresse.
Je peux aussi, pour simplifier, mettre une clé AUTOINCREMENT qui va remplacer le champ chronologique de mon enregistrement.
J'aimerais donc sortir les enregistrements N qui correspondent à la condition :
cours (N) / cours (N-1) > 1.05
Merci
Marsh Posté le 23-06-2004 à 09:48:25
Cela ne peut pas focntionner car les opérations et fonctions dans le "where" ne se font il me semble que sur la meme ligne, donc on ne peut pas recupérer la valeur de cours pour le jour suivant.
A mon avis la méthode que je t'ai exposé fonctionne et est assez rapide si la table n'est pas trop grosse.
Marsh Posté le 23-06-2004 à 10:12:03
Merci pour ta réponse, ça explique pourquoi je ne trouvais pas : ça n'existe pas !
Mais ma table est assez grosse.
Je vais alors pallier à ce problème en rajoutant lors de chaque enregistrement un champ par rapport à N-1 et N-2.
Au moins, je ferais mes premières requêtes par mySQL, et ensuite je les traiterai avec PHP
Merci donc !
Marsh Posté le 23-06-2004 à 10:22:48
Qu'est ce que tu entends par assez grosse. Ensuite cela dépends aussi du nombre de champ. Cel ane sert à rien de reproduire des informations déjà présente ailleurs dans la base.
Marsh Posté le 23-06-2004 à 12:01:56
essaie ça...
select t1.cours, t1.ladate, t2.cours, t2.ladate
from latable t1, latable t2
where t2.ladate = t1.ladate -1
and t1.cours / t2.cours > 1.05
Logiquement ça doit marcher...
Marsh Posté le 23-06-2004 à 14:23:59
Lord ii :
Assez grosse: 1500 enregistrements, avec 5 champs fixes, et là j'allais doubler le nombre de champs fixes (avec mes formules).
Arjuna :
je viens de voir ta proposition, ça semble intéressant (ça a l'air pas mal comme astuce), je vais d'abord tester.
Marsh Posté le 23-06-2004 à 14:32:14
Vu le faible nombre de lignes dans ta table, la méthode d'Arjuna devrait tourner rapidement (enfin il te faut un index sur ladate, mais d'après ce que j'ai compris, il existe).
Marsh Posté le 23-06-2004 à 14:49:20
papa6 a écrit : Lord ii : |
Ce que j'aime bien, c'est la notion de "assez grosse"
Citation : SQL> desc evl; |
(et encore, c'est loin d'être la plus grosse, les tables de gestion des stocks ou financière sont 20 fois pires )
Marsh Posté le 23-06-2004 à 16:23:34
On va pas jouer à la plus grosse, hein ?
Code :
|
Je compte même pas le nombre de lignes, la bécane mettrait 30' avant de répondre qu'il y a plus de 90.000.000 lignes ...
Marsh Posté le 23-06-2004 à 17:08:58
T'as pas mieu ?
|
Marsh Posté le 23-06-2004 à 17:13:24
enfin le problème c'est surtout le nombre de lignes, pas la taille d'une ligne
mais on s'écarte du sujet
Marsh Posté le 23-06-2004 à 09:08:11
Bonjour,
Je bloque sur un sujet qui me semblait pourtant facile, mais je n'ai rien trouvé, à moins que ce soit mon explication et les mots que j'utilise pour mes recherches qui soient défaillants :
J'ai une grosse table MySQL, avec un champ date (unique, donc je m'en sers comme clé index N à une date précise, N-1 pour la date immédiatement antérieure, N-2 pour 2 jours avant, etc...), un champ cours.
Je veux sortir tous les enregistrements "cours" pour lesquels :
cours (N) / cours (N-1) > 1.05
ou encore : cours(N) / cours(N-2) > 1.1
Merci pour vos réponses (enfin, si c'est possible)