Requête SQL en fonction de l'heure
19 messages
• Page 1 sur 2 • 1, 2
-

stone66 - WRInaute discret

- Messages: 122
- Inscription: 30 Aoû 2010
Requête SQL en fonction de l'heure
Bonjour,
voici un nouveau problème auquel je suis confronté :
j'ai un script PHP qui permet de choisir une ligne aleatoirement dans une base SQL et de l'afficher, donc à chaque fois que l'on accède à ce script ( rafraichissement de la page ou nouveau visiteur ) la requète est faite, j'aimerais que cette requête ne soit faite qu'une fois par jour.
Amicalement,
Stone66
voici un nouveau problème auquel je suis confronté :
j'ai un script PHP qui permet de choisir une ligne aleatoirement dans une base SQL et de l'afficher, donc à chaque fois que l'on accède à ce script ( rafraichissement de la page ou nouveau visiteur ) la requète est faite, j'aimerais que cette requête ne soit faite qu'une fois par jour.
Amicalement,
Stone66
- tosmatrix3
- Nouveau WRInaute

- Messages: 13
- Inscription: 1 Fév 2010
Re: Requête SQL en fonction de l'heure
Tu peux enregistrer le résultat de ta requête dans une table, avec l'heure à laquelle cette requête à été faite.
Ensuite dans ton php tu requêtes en premier cette table, avec comme filtre WHERE :
Si cette requête te retourne quelque chose : tu affiches le résultat.
Si elle ne te retourne rien (c'est donc la première exécution de la journée) : tu choisi une nouvelle ligne aléatoire, que tu intègres dans la matable, et tu affiches cette ligne.
Ensuite dans ton php tu requêtes en premier cette table, avec comme filtre WHERE :
- Code: Tout sélectionner
select *
from matable
WHERE TO_DAYS(NOW())-TO_DAYS(matable.le_champ_date)<1
Si cette requête te retourne quelque chose : tu affiches le résultat.
Si elle ne te retourne rien (c'est donc la première exécution de la journée) : tu choisi une nouvelle ligne aléatoire, que tu intègres dans la matable, et tu affiches cette ligne.
- idefix
- WRInaute occasionnel

- Messages: 319
- Inscription: 17 Jan 2007
Re: Requête SQL en fonction de l'heure
Tu peux aussi stocker le résultat de la requête dans un fichier texte.
Tu testes alors la dernière date de modification du fichier texte grâce à la fonction filemtime
C'est un système de cache assez classique.
Tu testes alors la dernière date de modification du fichier texte grâce à la fonction filemtime
C'est un système de cache assez classique.
-

loran750 - WRInaute passionné

- Messages: 2247
- Inscription: 15 Mar 2005
Re: Requête SQL en fonction de l'heure
Hello
Je te suggère de faire un CRON qui écrira soit dans un champ de la base, soit dans un fichier.
Et ensuite lorsque tu en as besoin tu la lis.
Sinon en SQL only, il y a la possibilité de rajouter un flag dans une table, de type DATE, et lorsque ta requête tourne, tu cherches le flag du jour, s'il n'existe pas,
- tu lances ta recherche
- tu positionnes le flag du jour à la place de l'ancien flag
- tu enregistres ta recherche,
sinon tu récupères la valeur du jour.
Cétouuuuuu
Je te suggère de faire un CRON qui écrira soit dans un champ de la base, soit dans un fichier.
Et ensuite lorsque tu en as besoin tu la lis.
Sinon en SQL only, il y a la possibilité de rajouter un flag dans une table, de type DATE, et lorsque ta requête tourne, tu cherches le flag du jour, s'il n'existe pas,
- tu lances ta recherche
- tu positionnes le flag du jour à la place de l'ancien flag
- tu enregistres ta recherche,
sinon tu récupères la valeur du jour.
Cétouuuuuu
-

raljx - WRInaute accro

- Messages: 2823
- Inscription: 10 Juil 2006
Re: Requête SQL en fonction de l'heure
Moi c'est "aleatoire" et 1x par jour qui me pose pb 
soit en effet tu balances ta requete en debut de matinée dans un fichier texte (mais y'a plus d'aleatoire)
soit tu balances une requete de XXX lignes que tu enregistre dans ton fichier texte et tu pioches "aleatoirement" cette fois-ci dedans le reste de la journée ...
soit en effet tu balances ta requete en debut de matinée dans un fichier texte (mais y'a plus d'aleatoire)
soit tu balances une requete de XXX lignes que tu enregistre dans ton fichier texte et tu pioches "aleatoirement" cette fois-ci dedans le reste de la journée ...
-

stone66 - WRInaute discret

- Messages: 122
- Inscription: 30 Aoû 2010
Re: Requête SQL en fonction de l'heure
raljx a écrit:soit en effet tu balances ta requete en debut de matinée dans un fichier texte (mais y'a plus d'aleatoire)
je vais opter pour le fichier texte car mon but est d'eviter les acces à la base de donnée, je comprend le principe mais j'ai du mal à le coder en php.
je vais faire quelques tests et vous tiens au courant, en attendant si quelqu'un à un exemple de code tout fait
amicalement
Stone66
-

raljx - WRInaute accro

- Messages: 2823
- Inscription: 10 Juil 2006
Re: Requête SQL en fonction de l'heure
tu peux aller faire un tour ici
http://www.lbb.org/script/Php/Texte_aleatoire/index.php
ou plus simplement google : http://www.google.fr/search?sourceid=chrome&ie=UTF-8&q=php+texte+aleatoire
si tu peux coder l'ecriture d'un fichier texte tu peux coder un affichage aleatoire
http://www.lbb.org/script/Php/Texte_aleatoire/index.php
ou plus simplement google : http://www.google.fr/search?sourceid=chrome&ie=UTF-8&q=php+texte+aleatoire
si tu peux coder l'ecriture d'un fichier texte tu peux coder un affichage aleatoire
-

stone66 - WRInaute discret

- Messages: 122
- Inscription: 30 Aoû 2010
Re: Requête SQL en fonction de l'heure
raljx a écrit:tu peux aller faire un tour ici
http://www.lbb.org/script/Php/Texte_aleatoire/index.php
ou plus simplement google : http://www.google.fr/search?sourceid=chrome&ie=UTF-8&q=php+texte+aleatoire
si tu peux coder l'ecriture d'un fichier texte tu peux coder un affichage aleatoire
en fait c'est pas tout à fait ça :
je veux piocher dans une ligne de ma base SQL aleatoirement mais une seul fois par jour.
mais avec toutes ces info je devrais trouver, je pense que dans le principe il faut que :
- nous somme le 14-10-2010, je pioche une ligne au hasard dans ma base SQL
- je la met dans un fichier texte avec la date
- à chaque visite je test si la date du fichier est egale à la date du jour
- si elle est égale j'affiche la ligne recuperer dans le fichier texte
- si elle est differente je retourne au debut
en gros pour que vous comprenniez bien c'est pour pouvoir afficher une citation différente par jour ( car actuellement j'ai une citation différente mais à chaque affichage ) mais sans faire des requete SQL pour rien
- idefix
- WRInaute occasionnel

- Messages: 319
- Inscription: 17 Jan 2007
Re: Requête SQL en fonction de l'heure
Tout à fait et tu n'auras qu'une requête par jour.
Je l'ai fait rapidement, dis moi si ça fonctionne :
Ob_start() est simplement destiné à mettre les données en tampon, ça facilite l'écriture du code : http://fr2.php.net/manual/fr/function.ob-start.php
Je l'ai fait rapidement, dis moi si ça fonctionne :
- Code: Tout sélectionner
<?php
$fichier="adresse_du_fichier.txt";
$jour_fichier=date("d", filemtime($fichier));
if ($jour_fichier==date("d")) readfile($fichier);
else {
ob_start();
// Les instructions qui te permettent d'afficher la citation
$tampon = ob_get_contents();
ob_end_clean();
file_put_contents($fichier,$tampon);
echo $tampon ;
}
?>
Ob_start() est simplement destiné à mettre les données en tampon, ça facilite l'écriture du code : http://fr2.php.net/manual/fr/function.ob-start.php
Dernière édition par idefix le Jeu Oct 14, 2010 19:10, édité 1 fois.
-

Leonick - WRInaute accro

- Messages: 19598
- Inscription: 8 Aoû 2004
Re: Requête SQL en fonction de l'heure
il y a plus facile : ton fichier contient la date dans son nom, genre random-20101014.inc et s'il n'existe pas tu le crées. Comme ça, pas besoin de vérifier si la date existe dans ton fichierstone66 a écrit:- je la met dans un fichier texte avec la date
- à chaque visite je test si la date du fichier est egale à la date du jour
-

raljx - WRInaute accro

- Messages: 2823
- Inscription: 10 Juil 2006
Re: Requête SQL en fonction de l'heure
encore + simple : tu generes ta requete sql à minuit 1 tous les jours . Elle efface l'ancienne entrée (de la veille) dans ton fichier texte. Tu lis ton fichier txt par jour sans avoir besoin de date.
-

stone66 - WRInaute discret

- Messages: 122
- Inscription: 30 Aoû 2010
Re: Requête SQL en fonction de l'heure
oh bein je vais essayé tout ça car j'ai reussi mais mon code est pas très simplifié:
- Code: Tout sélectionner
<?php
$date = date("d-m-Y");
$ouvre=fopen("date.txt","r"); // ouverture fichier en lecture "r"
while (!feof ($ouvre)) // tant que pas en fin de fichier
{
$tampon = fgets($ouvre, 4096); // mise en tampon des données
}
fclose($ouvre); // fermeture fichier
if ($date > $tampon) {
include '../connect.php';
$nb_lignes = "2000";
$id_max = $nb_lignes ;
$id = mt_rand(1,$id_max); // creation d'un nombre aleatoire
$req = mysql_query("SELECT proverbe,auteur,nb_commentaire FROM proverbe WHERE idproverbe='".$id."'");
$champ_citation = mysql_result($req,0,"proverbe");
$champ_auteur = mysql_result($req,0,"auteur");
$champ_commentaire = mysql_result($req,0,"nb_commentaire");
$champ_citation1 = utf8_encode(stripslashes($champ_citation));
$auteur1 = strtr($champ_auteur, 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ', 'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn+');
echo "document.write(\"<font class='intoxitation_proverbe'>" . $champ_citation1 . "</font><br /><a class='intoxitation_auteur' href='http://www.intoxitation.com/citation-auteur-" .$auteur1."-0.html' title='Voir toutes les citations de " .$champ_auteur."' target='_blank'>" .utf8_encode($champ_auteur)."</a>\")";
$ouvre=fopen("date.txt","w+"); // ouverture en lecture ( a+)
fwrite($ouvre,$date); // écriture fichier
fclose($ouvre); // fermeture fichier
$ouvre=fopen("citation.txt","w+"); // ouverture en lecture ( a+)
fwrite($ouvre,"<font class='intoxitation_proverbe'>".utf8_encode(stripslashes($champ_citation))."</font><br /><a class='intoxitation_auteur' href='http://www.intoxitation.com/citation-auteur-" .$auteur1."-0.html' title='Voir toutes les citations de ".$champ_auteur."' target='_blank'>".utf8_encode($champ_auteur)."</a>"); // écriture fichier
fclose($ouvre); // fermeture fichier
mysql_free_result($req);
mysql_close();
}
elseif ($date == $tampon) {
$ouvre=fopen("citation.txt","r"); // ouverture fichier en lecture "r"
while (!feof ($ouvre)) // tant que pas en fin de fichier
{
$tampon = fgets($ouvre, 4096); // mise en tampon des données
echo "document.write(\"$tampon\")"; // affichage du tampon
}
fclose($ouvre); // fermeture fichier
}
?>
-

raljx - WRInaute accro

- Messages: 2823
- Inscription: 10 Juil 2006
Re: Requête SQL en fonction de l'heure
m'a l'air bien compliqué pour ce qu'il y a a faire
en gros :
Dans le meme script
1 - tu crées une requete SQL qui va chercher 1 citation au hasard
2 - tu effaces (@unlink) le fichier texte existant et/ou tu en cree un nouveau ou tu ecris la citation
STOP
Dans un cron
1 - tu prevois une execution du script ci-dessus chaque jour a 00:01
STOP
Dans tes pages ou la citation doit apparaitre
1 - tu lis ton fichier texte et tu affiches la 1ere (et la seule) ligne
STOP
en gros :
Dans le meme script
1 - tu crées une requete SQL qui va chercher 1 citation au hasard
2 - tu effaces (@unlink) le fichier texte existant et/ou tu en cree un nouveau ou tu ecris la citation
STOP
Dans un cron
1 - tu prevois une execution du script ci-dessus chaque jour a 00:01
STOP
Dans tes pages ou la citation doit apparaitre
1 - tu lis ton fichier texte et tu affiches la 1ere (et la seule) ligne
STOP
-

stone66 - WRInaute discret

- Messages: 122
- Inscription: 30 Aoû 2010
Re: Requête SQL en fonction de l'heure
raljx a écrit:m'a l'air bien compliqué pour ce qu'il y a a faire
en gros :
Dans le meme script
1 - tu crées une requete SQL qui va chercher 1 citation au hasard
2 - tu effaces (@unlink) le fichier texte existant et/ou tu en cree un nouveau ou tu ecris la citation
STOP
Dans un cron
1 - tu prevois une execution du script ci-dessus chaque jour a 00:01
STOP
Dans tes pages ou la citation doit apparaitre
1 - tu lis ton fichier texte et tu affiches la 1ere (et la seule) ligne
STOP
ben moi je veux bien simplifier mais je ne connais pas cron, est-ce que c'est faisable sur un serveur mutualiser ?
-

milkiway - WRInaute accro

- Messages: 4910
- Inscription: 3 Fév 2004
Re: Requête SQL en fonction de l'heure
raljx a écrit:encore + simple : tu generes ta requete sql à minuit 1 tous les jours . Elle efface l'ancienne entrée (de la veille) dans ton fichier texte. Tu lis ton fichier txt par jour sans avoir besoin de date.
C'est effectivement le plus simple et le plus léger.
19 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- problème requête SQL dans une fonction PHP
- pb sur requete sql et champs qui correspond 1 fonction php
- Obtenir le trafic heure par heure calculé en moyenne sur 1 mois
- Requête SQL ?
- requête sql help!!
- [sql] Requête
- pb de requête sql
- Requête SQL
- fonction php avec du SQL
- Requête en fonction de la variable
- Google API : guide de développement de l'API Google - 20-09-2002
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Nombre moyen de mots par requête : statistiques AOL Août 2006 - 10-08-2006
- Nombre de clics dans les pages de résultats : statistiques AOL Août 2006 - 11-08-2006
- Informations sur l'infrastructure technique de Google - 01-11-2004
- Plein de chiffres incroyables sur Google Maps - 31-01-2009
- Google indexe le Flash - 28-04-2004
- Google Trends : un pas vers le web social ? - 22-12-2005
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
