Requête SQL en fonction de l'heure


stone66
WRInaute discret
WRInaute discret
 
Messages: 122
Inscription: 30 Aoû 2010

Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 13:06

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

tosmatrix3
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 13
Inscription: 1 Fév 2010

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 13:17

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 :
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
WRInaute occasionnel
 
Messages: 319
Inscription: 17 Jan 2007

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 13:24

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.


loran750
WRInaute passionné
WRInaute passionné
 
Messages: 2247
Inscription: 15 Mar 2005

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 13:31

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


raljx
WRInaute accro
WRInaute accro
 
Messages: 2823
Inscription: 10 Juil 2006

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 14:15

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 ...


stone66
WRInaute discret
WRInaute discret
 
Messages: 122
Inscription: 30 Aoû 2010

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 15:00

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
WRInaute accro
 
Messages: 2823
Inscription: 10 Juil 2006

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 15:13

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 :)


stone66
WRInaute discret
WRInaute discret
 
Messages: 122
Inscription: 30 Aoû 2010

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 15:22

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
WRInaute occasionnel
 
Messages: 319
Inscription: 17 Jan 2007

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 16:17

Tout à fait et tu n'auras qu'une requête par jour.
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
WRInaute accro
 
Messages: 19598
Inscription: 8 Aoû 2004

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 16:41

stone66 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
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 fichier


raljx
WRInaute accro
WRInaute accro
 
Messages: 2823
Inscription: 10 Juil 2006

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 16:49

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
WRInaute discret
 
Messages: 122
Inscription: 30 Aoû 2010

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 16:49

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
WRInaute accro
 
Messages: 2823
Inscription: 10 Juil 2006

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 17:03

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


stone66
WRInaute discret
WRInaute discret
 
Messages: 122
Inscription: 30 Aoû 2010

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 19:08

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
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Re: Requête SQL en fonction de l'heure

Message le Jeu Oct 14, 2010 19:17

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.

Requête SQL en fonction de l'heure

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités