Requete sql

Résolu
Kroma Messages postés 51 Statut Membre -  
Bikarfioul Messages postés 52 Statut Membre -
Bonjour,

J'aimerais sur mon site afficher un TOP 5 (des 7 derniers jours) des messages postés par les internautes (par ordre de vote). Je n'arrive pas a trouver la bonne requete.

Pour l'instant j'arrive à afficher les messages par rapport à un numéro de semaine :

$reponse = mysql_query("SELECT * FROM ma_table WHERE semaine='$semaine' AND annee='$annee' ORDER BY vote DESC LIMIT 0,5");

Ce qui me donne un TOP 5 pour une semaine donné (par ex : Semaine 52), le problème c'est que dès qu'on arrive au lundi, comme le numéro de semaine change et qu'il n'y a pas encore de message posté, le TOP 5 est vide.

En fait dans la condition WHERE il me faudrait quelque chose du genre : WHERE = date_aujourd'hui et jusqu'a - 7 jours

Merci pour votre aide

15 réponses

Utilisateur anonyme
 
bonjour,

il suffit peut être de modifier la requête de manière à extraire les 5, en incluant dans le tri le n° de semaine.
0
Bikarfioul Messages postés 52 Statut Membre 5
 
Salut !

Et si tu tente d'interroger ta base en fonction de la semaine antérieur à ce jour.

$reponse = mysql_query("SELECT * FROM ma_table WHERE semaine>'$semaine-1' AND annee='$annee' ORDER BY vote DESC ");
0
Kroma Messages postés 51 Statut Membre 2
 
Merci beaucoup pour votre aide. Mais j'ai du mal m'exprimer. Je vais donner un exemple : Si nous sommes le 22 décembre j'aimerais que mon TOP 5 prenne en compte le 16, 17, 18, 19, 20, 21 et le 22 décembre pour le classement, ce qui nous fait un TOP 5 des 7 derniers jours.

J'espère avoir été un peu plus clair.
0
Bikarfioul Messages postés 52 Statut Membre 5
 
le problème de notre coté c'est que l'on ne connait pas la structure de ta base.

La requête que j'ai indiqué (reponse 2) te remonte les resultats de la semaine dernière à la semaine du jour.

Ensuite c'est sur ton résultat que tu dois faire un tri.

Mais si ta base disposait d'un champ date cela serait encore mieux ;o)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kroma Messages postés 51 Statut Membre 2
 
Ah ok excusez moi pour mon manque d'information. Ma base a le champs suivant :

date : 22/12/2008
0
Bikarfioul Messages postés 52 Statut Membre 5
 
Alors je conseil d'ajouter avant ta requete une variable indentifiant la date il y'a 7 jours

$jmoinSept = date ("Y/m/d", mktime(0,0,0,date("m"),date("d")-7,date("Y")));

Puis d'instancer ta requete comme suit :

$reponse = mysql_query("SELECT * FROM ma_table WHERE date >= '$jmoinSept ' ORDER BY vote DESC LIMIT 0,5");
0
Kroma Messages postés 51 Statut Membre 2
 
Merci sincèrement pour ton aide mais je n'y arrive pas encore. Il ne doit pas manquer grand chose.
J'ai essayé avec ta requête et ça n'a pas fonctionné alors j'ai essayé en remettant le jour en premier dans la date :

$jmoinSept = date ("d/m/Y", mktime(0,0,0,date("d")-7,date("m"),date("Y")));

Mais ça ne marche pas non plus. Ça m'affiche des messages du mois de novembre et de décembre.
0
Bikarfioul Messages postés 52 Statut Membre 5
 
le truc est peut être du aux type de ta donnée.

Quand tu injectes ton nouveau vote la date est généré par le système lui même ?

du style INSERT INTO .... date = now() ;

si ce n'est pas le cas il se peut que le problème vienne de là.

Mais je vais quand même testé de mon coté du temps de midi.
0
Bikarfioul Messages postés 52 Statut Membre 5
 
La solution est sous nos yeux :)

tu as changé le concepteur du mktime https://www.php.net/mktime

int mktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] )


tu as saisie :

$jmoinSept = date ("d/m/Y", mktime(0,0,0,date("d")-7,date("m"),date("Y"))); 


Alors que tu aurais dû laisser comme et juste corriger l'interprétation du date :

$jmoinSept = date ("d/m/Y", mktime(0,0,0,date("m"),date("d")-7,date("Y"))); 


Tu n'as plus qu'a tester ;o)

$reponse = mysql_query("SELECT * FROM ma_table WHERE date >= '$jmoinSept ' ORDER BY vote DESC LIMIT 0,5");
0
Kroma Messages postés 51 Statut Membre 2
 
Tu vas me prendre pour un boulet mais cela ne fonctionne toujours pas. J'ai toujours des message du mois de novembre qui s'affiche.
0
Bikarfioul Messages postés 52 Statut Membre 5
 
Fais des ECHO sur tes valeurs car là je ne comprends pas la raison.

ECHO $jmoinSept;

ECHO $reponse[date];

tu ne devrais avoir que 5 retours de $reponse et la date du 15/12/2008 pour $date.
0
Kroma Messages postés 51 Statut Membre 2
 
Tu dois avoir mis le doigt sur le problème.
Je n'y comprends plus rien.

le ECHO $reponse[date]; ne me donne rien alors que le ECHO $jmoinSept; m'affiche 15/12/2008

Pourtant j'ai bien un champs qui se nomme date dans ma table.
0
Bikarfioul Messages postés 52 Statut Membre 5
 
le ECHO $reponse[date]; tu la testé avec des quotes ?

ECHO $reponse['date'];
0
Kroma Messages postés 51 Statut Membre 2
 
Oui tout a fait j'ai testé avec les cotes.
0
Bikarfioul Messages postés 52 Statut Membre 5
 
Il ne te reste plus qu'a faire un

echo nl2br(print_r($reponse,true));

pour avoir tous les retours de $reponse.


Tu fais quand même bien un While de ton résultat après ton mysql_query ?
0