Les nouvelles des 5 derniers jours

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Les nouvelles des 5 derniers jours

par ouckileou » 11 juil. 2005, 19:22

relis le thread en entier et tu verras qu'une solution de ce style a déjà été proposée, et que ce qui était voulu n'étais pas aussi simple :roll:

par Augure » 11 juil. 2005, 18:33

DATEDIFF() retourne le nombre de jours entre la date de début expr et la date de fin expr2. expr et expr2 sont des expressions de type DATE ou DATETIME. Seule la partie DATE est utilisée dans le calcul.

Code : Tout sélectionner

SELECT * FROM nouvelles WHERE DATEDIFF(CURRENT_DATE,dateNou)=<5 ORDER BY dateNou DESC

par Cyrano » 10 juil. 2005, 14:46

Intéressant, mais attention, les requêtes imbriquées ne fonctionnent pas sur toutes les versions de MySQL: si ça fonctionne bien en local avec la dernière version de MySQL, tu risques d'être désappointé si une fois en ligne ça ne fonctionne plus à cause d'une version plus ancienne :-k

Merci !

par cedricm » 10 juil. 2005, 14:39

Merci pour votre aide sa fonctionne bien :)

Voici la requête utilisée au final :

Code : Tout sélectionner

$sql = 'SELECT n.idNou, n.contNou, n.titreNou, YEAR(n.dateNou) as annee, MONTH(n.dateNou) as mois, DAY(n.dateNou) as jour, HOUR(n.dateNou) as heure, MINUTE(n.dateNou) as min, p.pseudoPos, p.mailPos FROM nouvelles n, posteur p WHERE n.idPos=p.idPos AND DATE(dateNou)>(SELECT DISTINCT DATE(dateNou) FROM nouvelles LIMIT '.$news_par_page.',1) ORDER BY n.dateNou DESC;';

Re: Je me suis mal exprimé

par ouckileou » 10 juil. 2005, 14:19

Désolé, je n'avais pas mit sa clairement dans mon exemple, en fait les jours ne sont pas forcéments consécutifs.
je ne vois pas ce que ça change, une clause WHERE donne un critère de sélection, peu importe l'organisation de tes données.

Ou alors tu veux dire que théoriquement, on est le 10, donc on devrait récupérer toutes les news postées depuis le 5 inclus
mais que s'il n'y a pas eu de news posté le 6, on récupére toutes les news depuis le 4 ?

édition : bon j'avais mal lu l'exemple, et comme Cyrano a répondu...

par Cyrano » 10 juil. 2005, 14:16

En une seule requête, je crains que ce soit difficile. Il te faudrait dans un premier temps récupérer la cinquième date à partir de la plus récente avec quelque chose du genre:

Code : Tout sélectionner

SELECT DISTINCT(DateNou) FROM nouvelles ORDER BY DateNou DESC LIMIT 5,1
Ensuite, tu fais une seconde requête avec en critère de tri une date >= au résultat obtenu.

Je me suis mal exprimé

par cedricm » 10 juil. 2005, 14:11

Désolé, je n'avais pas mit sa clairement dans mon exemple, en fait les jours ne sont pas forcéments consécutifs.

Je veut récupérer les nouvelles des 5 derniers jours où il y a eu des nouvelles de postées, par exemple sur les enregistrements suivant :

10/10/2005 : News 9
5/10/2005 : News 8
4/10/2005 : News 7
3/10/2005 : News 6
2/10/2005 : News 5
2/10/2005 : News 4
1/10/2005 : News 3
5/9/2005 : News 2
4/9/2005 : News 1

il faut recupérer :

10/10/2005 : News 9
5/10/2005 : News 8
4/10/2005 : News 7
3/10/2005 : News 6
2/10/2005 : News 5
2/10/2005 : News 4

Je pense qu'il faudrait alors récupérer la date 2/10/2005 dans cet exemple et appliquer la requete dont tu parlait.

par ouckileou » 10 juil. 2005, 13:51

il faudrait que tu mettes une condition
WHERE date de la news = dans les 5 derniers jours

soit "date de la news >= maintenant - 5 jours"

donc regarde du coté de cette fonction MySQL : SUBDATE()

=> http://dev.mysql.com/doc/mysql/fr/date- ... tions.html

le GROUP BY sert à regrouper des lignes sur un champ commun, rien ne te permettrait de dire "les 5 derniers jours" uniquement avec un GROUP BY
de plus, tu ne pourrais pas sélectionner le contenu, le titre ou toute autre information unique avec ce GROUP BY ;)

Les nouvelles des 5 derniers jours

par Cédricm » 10 juil. 2005, 13:40

Bonjour à tous,

Je recherche une requête permettant de sélectionner les nouvelles des 5 derniers jours (et non pas les 5 dernières nouvelles)

La table à la structure suivante :

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS nouvelles ( idNou INTEGER NOT NULL AUTO_INCREMENT , idPos INTEGER NOT NULL , contNou TEXT NOT NULL , titreNou VARCHAR (255) NOT NULL , dateNou DATETIME NOT NULL , PRIMARY KEY (idNou) )
Pour simplifier la table se compose d'une date, d'un champ titre.
Sa donne par exemple :

10/10/2005 : News 9
9/10/2005 : News 8
9/10/2005 : News 7
8/10/2005 : News 6
7/10/2005 : News 5
6/10/2005 : News 4
6/10/2005 : News 3
5/10/2005 : News 2
4/10/2005 : News 1

La requête doit ici sélectionner :
10/10/2005 : News 9
9/10/2005 : News 8
9/10/2005 : News 7
8/10/2005 : News 6
7/10/2005 : News 5
6/10/2005 : News 4
6/10/2005 : News 3

Je pense qu'une telle requête est faisable sans passer par plusieurs requêtes, avec un GROUP BY. Seulement je ne m'y connais pas assez pour la trouver!

J'essaye des requêtes pour sa mais cela ne donne pas grand chose pour le momment, par exemple :

Code : Tout sélectionner

SELECT YEAR(dateNou), MONTH(dateNou), DAY(dateNou) , COUNT(idNou) FROM nouvelles GROUP BY YEAR(dateNou), MONTH(dateNou), DAY(dateNou) ORDER BY dateNou DESC LIMIT 0,5;
Qui donne le nombre de nouvelles sur chacun des 5 derniers jours.
Je continue a chercher....

Merci pour votre aide !