Bonjour,

Soit la table suivante :
te_image_img (img_id, img_id_proprietaire, img_id_type, img_fichier, img_date, img_titre)

Je cherche l'image précédente de celle affichée, du même type et du même propriétaire.

J'ai fait cette requête qui fonctionne mais je la trouve un brin compliquée a a priori.

Y'aurait pas plus simple ?
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 img_id
FROM te_image_img
WHERE img_id_type = 3
	AND img_id_proprietaire = 16
	AND img_date = 
	(
		-- Date de l'image précédente du même type et du même propriétaire
		SELECT MAX(img_date) AS date_prec
		FROM te_image_img
		WHERE img_id_type = 3
			AND img_id_proprietaire = 16
			AND img_date < 
			(
				-- date de l'image actuelle
				SELECT img_date
				FROM te_image_img
				WHERE img_id = 4
			)
	)
Surtout que je n'ai pas directement le img_id_proprietaire et qu'il faudrait en fait que je fasse ainsi :
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
20
21
22
23
24
25
26
27
28
29
SELECT img_id
FROM te_image_img
WHERE img_id_type = 3
	AND img_id_proprietaire = 
	(
		SELECT img_id_proprietaire
		FROM te_image_img
		WHERE img_id = 4
	)
	AND img_date = 
	(
		-- Date de l'image précédente du même type et du même propriétaire
		SELECT MAX(img_date) AS date_prec
		FROM te_image_img
		WHERE img_id_type = 3
			AND img_id_proprietaire = 
			(
				SELECT img_id_proprietaire
				FROM te_image_img
				WHERE img_id = 4
			)
			AND img_date < 
			(
				-- date de l'image actuelle
				SELECT img_date
				FROM te_image_img
				WHERE img_id = 4
			)
	)
Utilisant MySQL, je pourrais jouer avec LIMIT de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
SELECT i.img_id
FROM te_image_img i
INNER JOIN te_image_img i2
	ON i2.img_id_proprietaire = i.img_id_proprietaire
	AND i2.img_id_type = i.img_id_type
WHERE i2.img_id = 4 -- image actuelle
	AND i.img_date < i2.img_date
ORDER BY i.img_date DESC	
LIMIT 1
Mais je me demande si, avec un grand nombre d'images, les performances ne vont pas se dégrader plus vite qu'avec la première requête.

Et comme j'utilise MySQL, pas de ROW NUMBER OVER PARTITION non plus !