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 ?
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 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 ) )
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
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 ) )
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.
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
Et comme j'utilise MySQL, pas de ROW NUMBER OVER PARTITION non plus !
Partager