Sur mon blog, je souhaite afficher tous les articles du mois dernier. Mais si ce nombre est inférieur à 10, je veux afficher les dix articles les plus récents (en d'autres termes, il ne devrait jamais y avoir moins de 10 articles sur la première page). Je me demande s'il existe un moyen de le faire dans une seule requête?Comment faire une requête pour les 10 articles les plus récents ou les articles du mois dernier, selon ce qui est le plus?
Actuellement, j'exécutons d'abord cette requête:
select count(*) from posts where timestamp > ($thirty_days_ago)
order by timestamp desc
Si ce nombre est supérieur ou égal à 10:
select * from posts where timestamp > ($thirty_days_ago)
order by timestamp desc
Sinon:
select * from posts order by timestamp desc limit 10
Mais cela me oblige pour exécuter deux requêtes. Existe-t-il un moyen plus efficace de le faire avec une seule requête? (J'utilise MySQL.)
Mais j'imagine que votre hypothèse de 100 était la raison pour laquelle personne n'a suggéré cette stratégie. – dkretz
Parfois, la correction perd. L'interface utilisateur est un endroit où cela se produit plus souvent que d'autres endroits que j'ai codés. –
En fait, j'aime vraiment cette solution, sauf dans mon cas 30 serait une limite supérieure plus que suffisante (je ne prévois moi-même jamais en moyenne plus d'un post par jour). – Kip