Salut à tous.
Vous voulez dire les 10 articles les plus récents.
Par votre demande, je comprends que vous recherchez pour une ville donnée, une et une seule ligne ayant la plus haute date de publication. Est-ce bien cela ?
La solution que vous proposez ne fonctionne pas car en cas de doublon sur la plus haute date de publication, vous aurez plusieurs lignes et non une seule.
Un "group by" sur la ville et votre problème est résolu.
Sauf qu'en sélectionnant la ville, vous risquez d'avoir plusieurs doublons sur la date de publication.
Pour cela, vous devez prendre l'identifiant le plus grand, sachant que vous recherchez la plus haute date de publication.
Je vais partir de l'hypothèse que les identifiants de votre table posts sont croissants et dans le même sens que les dates de "publish_date", afin de simplifier le traitement.
Autrement dit, si "publish_date ligne n+1" >= "publish_date ligne n" alors j'ai "id ligne n+1" > "id ligne n".
En effet, c'est cela, sauf que le "distinct" se fait sur la totalité de ce que vous extrayez et non que sur une colonne.
Par contre, vous n'avez pas indiqué la version MySql que vous utilisez.
1 2 3 4 5 6 7 8 9 10 11 12
| select t1.*
from posts as t1
inner join ( select city_id,
max(id) as id
from posts
where publish_date >= '2018-10-03 18:00:00'
group by city_id
) as t2
on t2.city_id = t1.city_id
and t2.id = t1.id
order by t1.city_id
limit 10; |
Ne sachant pas trop ce dont vous avez besoin comme colonnes, j'ai mis "*" mais normalement, vous devez mettre que les colonnes dont vous avez besoin.
@+
Partager