Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/08/2011, 16h42   #1
Invité de passage
 
Inscription : mars 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 7
Points : 1
Points : 1
Par défaut Problème d'UNION et d'ORDER

Bonjour à tous,

Voici la requête sur laquelle je planche.. :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(
SELECT DISTINCT (
comments.type_id
) AS type_id, created_at
FROM comments
WHERE TYPE = 'article'
AND approved =1
ORDER BY created_at DESC
)
UNION (
SELECT DISTINCT (
id
) AS type_id, created_at
FROM articles
WHERE contributed =1
AND published =1
) ORDER BY `tmp`.`created_at` DESC LIMIT 25 OFFSET 0
Cela va me sortir quelque chose comme cela :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
27668 	2011-08-30 15:43:53
27659 	2011-08-30 15:31:44
18550 	2011-08-30 14:57:45
12817 	2011-08-30 12:07:04
27659 	2011-08-30 10:01:49
27636 	2011-08-30 09:04:03
12817 	2011-08-30 07:21:58
27645 	2011-08-30 00:59:44
27612 	2011-08-30 00:36:57
27616 	2011-08-29 23:30:07
27524 	2011-08-29 21:27:28
27636 	2011-08-29 21:09:41
27619 	2011-08-29 21:04:41
27616 	2011-08-29 20:34:24
27616 	2011-08-29 20:33:42
9190 	2011-08-29 19:38:03
Cette requête fonctionne, seulement j'aimerai que cela me sorte des type_id distincts (Or là vu que created_at n'est pas distinct, j'ai des type_id en double), et de préférence l'occurrence la plus récente du type_id afin que l'order soit correct

J'ai essayé quelque chose comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
SELECT tmp.type_id, tmp.created_at
FROM (
(
SELECT DISTINCT (
comments.type_id
) AS type_id, created_at
FROM comments
WHERE TYPE = 'article'
AND approved =1
ORDER BY created_at DESC
)
UNION (
SELECT DISTINCT (
id
) AS type_id, created_at
FROM articles
WHERE contributed =1
AND published =1
)
) AS tmp
GROUP BY `tmp`.`type_id` ORDER BY `tmp`.`created_at` DESC
Mais il doit y avoir un problème car cela enlève des IDs

Résultat :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
27668 	2011-08-30 15:43:53
27659 	2011-08-30 10:01:49
27645 	2011-08-30 00:59:44
27619 	2011-08-29 21:04:41
27616 	2011-08-29 20:33:42
9190 	2011-08-29 19:38:03
27633 	2011-08-29 18:51:10
27631 	2011-08-29 18:50:28
27636 	2011-08-29 16:11:17
27612 	2011-08-29 15:56:11
27620 	2011-08-29 11:38:07
27458 	2011-08-28 20:49:16
27524 	2011-08-28 20:12:28
27560 	2011-08-28 20:05:20
27561 	2011-08-28 20:04:33
25331 	2011-08-28 16:52:30
L'ID 18550 ainsi que 12817 ont disparu par exemple...

Je pense que cela vient du fait que lors du GROUP BY ce n'est pas l'ID le plus récent qui est gardé...

Une idée ?

Merci beaucoup !
ekoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 22h56   #2
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
salut,

les "distinct" sont inutiles car cela s'applique sur l'ensemble des colonnes de ton select

essaie ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT tmp.type_id, max(tmp.created_at)
FROM (
(
SELECT type_id AS type_id, created_at
FROM comments
WHERE TYPE = 'article'
AND approved =1
)
UNION (
SELECT id AS type_id, created_at
FROM articles
WHERE contributed =1
AND published =1
)
) AS tmp
GROUP BY `tmp`.`type_id` ORDER BY `tmp`.`created_at` DESC
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 09h34   #3
Invité de passage
 
Inscription : mars 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 7
Points : 1
Points : 1
Merci pour la réponse !

Du coup j'suis parti sur une autre solution grâce à un collègue : passer par une table temporaire et faire mon distinct sur cette table (je n'ai pas besoin de récupérer le created_at, il ne me sert que pour le tri)
ekoze est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h05.


 
 
 
 
Partenaires

Hébergement Web