Affichage des table dont date <= à 30jours...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichage des table dont date <= à 30jours...

Re: Affichage des table dont date <= à 30jours...

par AB » 24 août 2009, 20:40

Salut,

Sans vouloir jouer l'empêcheur de tourner en rond, j'ai quand une petite question: pourquoi devoir absolument utiliser trois champ pour stocker la date au lieu d'un seul ?
Si c'est pour des questions de format d'affichage, il existe des fonctions permettant de formater facilement tout ça en sortie.

Le format aaaa-mm-jj qui peut surprendre au début permet des tris sur les dates et est donc optimal pour toutes les manipulations classiques. (sélectionnez toutes les enregistrements entre la date X et la date Y, etc, etc)
+1 Le fait de ne pas rentrer les dates dans un format date ou datetime te prives d'utiliser les fonctions mysql de tri sur les dates de manière optimale.
Avec un champ "champ_date" au format date, la requête qu'à indiqué Victor pour tenir compte de tes trois champs deviendrait
SELECT * FROM annonce WHERE DATEDIFF(NOW(), champ_date) <= 30;
et serait bien plus rapide d'exécution.

Re: Affichage des table dont date <= à 30jours...

par iclo » 24 août 2009, 13:50

Salut,

Sans vouloir jouer l'empêcheur de tourner en rond, j'ai quand une petite question: pourquoi devoir absolument utiliser trois champ pour stocker la date au lieu d'un seul ?
Si c'est pour des questions de format d'affichage, il existe des fonctions permettant de formater facilement tout ça en sortie.

Le format aaaa-mm-jj qui peut surprendre au début permet des tris sur les dates et est donc optimal pour toutes les manipulations classiques. (sélectionnez toutes les enregistrements entre la date X et la date Y, etc, etc)

Re: Affichage des table dont date <= à 30jours...

par Victor BRITO » 24 août 2009, 13:26

Essaie la requête suivante :

Code : Tout sélectionner

SELECT * FROM annonce WHERE DATEDIFF(NOW(), CONCAT(annee, '-', mois, '-', jour)) <= 30;
Pour la requête de suppression, il faudra utiliser la même clause WHERE (en la terminant par > 30, bien entendu).

Quelques lectures illustrant et expliquant la requête suggérée :

Affichage des table dont date <= à 30jours...

par cleex » 24 août 2009, 12:33

Bonjour,

J'ai crée un site de petite annonces gratuite qui doivent rester mximum 30 jours.
J'ai donc 2 solutions :

1) Afficher celles qui ont moin de 30 jours
2) Supprimer automatiquement ( script automatique sur le serveur ) celles qui ont plus de 30 jours.

Ma table comporte les champs suivants qui serviraient à faire cette selection :

jour = jour de la mise en ligne de l'annonce
mois = mois de la mise en ligne de l'annonce
annee = année de la mise en ligne de l'annonce

Pour des raison de problème, j'ai du séparer cette date comme ci-dessus.

Maintenant voici mon code pour afficher la table...
Je précise que le script marche mais qu'il faut juste y mettre la restriction de temps.
//Une connexion SQL est déjà ouverte ici...
$messagesParPage=40; //Nous allons afficher 40 messages par page.
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM annonce WHERE status=1'); // <--RESTRICTION A METTRE ICI
//Nous récupérons le contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
     $pageActuelle=intval($_GET['page']);
     
     if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
     {
          $pageActuelle=$nombreDePages;
     }
}
else // Sinon
{
     $pageActuelle=1; // La page actuelle est la n°1    
}

$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire
// La requête sql pour récupérer les messages de la page actuelle.
$retour_messages=mysql_query('SELECT * FROM annonce WHERE status=1 ORDER BY id DESC LIMIT '.$premiereEntree.', '.$messagesParPage.''); // <-- RESTRICTION AUSSI A METTRE ICI

while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle
{
...
}
Merci d'avance à ceux qui prendront la peine (oui oui ... =D> ) de m'aider.

Dorian