GROUP BY suivit d'un ORDER BY ne fait pas bon ménage
Bonjour
Je suis actuellement en train de mettre en place une requête pour récupérer les sociétés les plus visitées du site dans une catégorie donnée.
Voila le schema de la table company
Code:
1 2 3 4 5 6 7
|
CREATE TABLE `company` (
`id` int(11) NOT NULL,
`category_id` int(11) DEFAULT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`nb_visits` int(11) NOT NULL
) |
Pour pouvoir récupérer les 10 sociétés les plus visitées pour une catégorie donnée c'est assez simple, il suffit de faire la requête suivante
Code:
1 2 3 4 5 6
|
SELECT *
FROM company
WHERE category_id = 1 ;; par exemple
ORDER BY nb_visits DESC
LIMIT 10 |
Le problème c'est que dans la base, il y a des plusieurs sociétés différentes ayant le même nom, et on veut dans notre requête récupérer 10 sociétés les plus visitées, mais ayant un nom différent.
Pour ça je fait un simple group by name de cette façon
Code:
1 2 3 4 5 6 7
|
SELECT *
FROM company
WHERE category_id = 1 ;; par exemple
GROUP BY name
ORDER BY nb_visits DESC
LIMIT 10 |
Si j'ai par exemple une société A avec un nb_visits à 1000 et une autre société A avec un nb_visits à 2, le comportement du group by est indéterminé, il va parfois gardé la société A avec 1000, parfois la société A avec 2.
Dans le cas ou il garde la société A avec 1000, cela m'arrange card pour le ORDER BY, 1000 sera bien pris en compte. Par contre dans le cas ou il garde la société A avec 2, c'est embêtant car du coup le plus gros chiffre (1000) ne sera pas pris en compte dans le ORDER BY, et la société A, qui est potentiellement la plus visité du site, n'apparaîtra pas dans la requête.
Une idée de comment résoudre la problématique.