Requete sql
Résolu
Kroma
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
-
Bikarfioul Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
Bikarfioul Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Requete sql
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
- Jointure sql ✓ - Forum MySQL
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
15 réponses
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.
il suffit peut être de modifier la requête de manière à extraire les 5, en incluant dans le tri le n° de semaine.
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 ");
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 ");
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.
J'espère avoir été un peu plus clair.
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)
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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");
$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");
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.
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.
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.
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.
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 :
Alors que tu aurais dû laisser comme et juste corriger l'interprétation du date :
Tu n'as plus qu'a tester ;o)
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");
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.
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.
ECHO $jmoinSept;
ECHO $reponse[date];
tu ne devrais avoir que 5 retours de $reponse et la date du 15/12/2008 pour $date.
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.
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.