Requete sql

Résolu/Fermé
Kroma Messages postés 44 Date d'inscription vendredi 7 novembre 2008 Statut Membre Dernière intervention 17 mai 2009 - 22 déc. 2008 à 07:38
Bikarfioul Messages postés 40 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 28 juin 2010 - 26 déc. 2008 à 07:26
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
22 déc. 2008 à 08:51
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 40 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 28 juin 2010 5
22 déc. 2008 à 09:00
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 44 Date d'inscription vendredi 7 novembre 2008 Statut Membre Dernière intervention 17 mai 2009 2
22 déc. 2008 à 09:14
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 40 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 28 juin 2010 5
22 déc. 2008 à 09:27
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 44 Date d'inscription vendredi 7 novembre 2008 Statut Membre Dernière intervention 17 mai 2009 2
22 déc. 2008 à 09:31
Ah ok excusez moi pour mon manque d'information. Ma base a le champs suivant :

date : 22/12/2008
0
Bikarfioul Messages postés 40 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 28 juin 2010 5
22 déc. 2008 à 09:59
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 44 Date d'inscription vendredi 7 novembre 2008 Statut Membre Dernière intervention 17 mai 2009 2
22 déc. 2008 à 10:15
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 40 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 28 juin 2010 5
22 déc. 2008 à 10:53
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 40 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 28 juin 2010 5
22 déc. 2008 à 12:43
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 44 Date d'inscription vendredi 7 novembre 2008 Statut Membre Dernière intervention 17 mai 2009 2
22 déc. 2008 à 12:52
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 40 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 28 juin 2010 5
22 déc. 2008 à 13:20
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 44 Date d'inscription vendredi 7 novembre 2008 Statut Membre Dernière intervention 17 mai 2009 2
22 déc. 2008 à 14:03
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 40 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 28 juin 2010 5
22 déc. 2008 à 21:31
le ECHO $reponse[date]; tu la testé avec des quotes ?

ECHO $reponse['date'];
0
Kroma Messages postés 44 Date d'inscription vendredi 7 novembre 2008 Statut Membre Dernière intervention 17 mai 2009 2
23 déc. 2008 à 09:39
Oui tout a fait j'ai testé avec les cotes.
0
Bikarfioul Messages postés 40 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 28 juin 2010 5
26 déc. 2008 à 07:26
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