Bonjour à tous,
Je me permet de créer ce post en désespoir de cause...
Voici mon problème :
J'ai une table (sous MySQL: 5.0.51a) assez simple de ce type :
Mais qui contient quelques millions de lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Champ Type ownerID bigint(20) INDEX balance decimal(22,2) date datetime INDEX
Les dates ne sont pas fixes (environs toutes les 10 minutes avec des trous de plusieurs heures possible, ainsi qu'un décalage dans le temps, genre : 2011-10-18 06:09:58, 2011-10-18 06:20:19,...)
Dans ces lignes, j'aurais besoin de récupérer pour un ownerID, la valeur de balance actuelle, la balance -1 semaine et la balance -1 mois.
j'utilise pour le moment la requête suivante :
Ce n'est pas propre du tout, j'appelle 3 fois une table assez grosse, ce qui plombe complètement les perfs de la requête...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 SELECT ( SELECT `balance` FROM `table` WHERE `ownerID`='.$_POST['characterID'].' AND `date` > DATE_ADD(UTC_TIMESTAMP(),INTERVAL -2 HOUR) ORDER BY `date` DESC LIMIT 0,1) `balance`, ( SELECT `balance` FROM `table` WHERE `ownerID`='.$_POST['characterID'].' AND `date` BETWEEN DATE_ADD(DATE_ADD(UTC_TIMESTAMP(),INTERVAL -1 WEEK),INTERVAL -1 DAY) AND DATE_ADD(UTC_TIMESTAMP(),INTERVAL -2 HOUR) ORDER BY `date` DESC LIMIT 0,1) `balance7`, ( SELECT `balance` FROM `table` WHERE `ownerID`='.$_POST['characterID'].' AND `date` BETWEEN DATE_ADD(DATE_ADD(UTC_TIMESTAMP(),INTERVAL -1 MONTH),INTERVAL -1 DAY) AND DATE_ADD(UTC_TIMESTAMP(),INTERVAL -2 HOUR) ORDER BY `date` DESC LIMIT 0,1) `balance30`;
J'aimerais donc savoir si on peut appeler une seule fois la table et récupérer les 3 valeurs souhaitées en une fois
NB : que les valeurs soient sous la forme
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT balance,balance7,balance30
où date correspond aux 3 dates recherchées, avec un résultat sur 3 lignes m'importe peu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT date, value
Voilà, j'espère avoir été assez clair, et surtout j'attends vos remarques avec impatience !
Merci d'avance à tout ceux qui prendront du temps pour me répondre
Partager