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 :
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
Mais qui contient quelques millions de lignes.
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 :
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`;
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...

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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT balance,balance7,balance30
ou où date correspond aux 3 dates recherchées, avec un résultat sur 3 lignes m'importe peu.


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