limiter le nombre d'enregsitrements dans une table mysql

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par code, 28 Septembre 2005.

  1. code
    code WRInaute impliqué
    Inscrit:
    29 Juillet 2005
    Messages:
    617
    J'aime reçus:
    0
    Bonjour,

    voila, je suis confonté à un problème :cry: . J'ai un moteur de recherche sur mon site qui enregistre les mots clés tapés par les visiteurs pour afficher les 10 derniers mots clés tapés.. Ces mots s'inscrivent dans une table.

    Ce qui m'énerve c'est que je dois vider régulièrement cette table car elle a tendance (forcement) à grossir trop rapidement...

    Je que j'aimerais pouvoir faire, c'est par exemple limiter les enregistrement à 100. Lorsque les 100 enregistrements seraient effectués, l'enregistrement numéro 101 prendrait la PREMIERE place et non la 101eme comme c'est le cas actullement. Bref... Cela permettrait de ne jamais dépassé les 100 enregsitrements dans ma tag
    ble et donc d'en limiter la taille. :lol:
     
  2. Fab le Fou
    Fab le Fou WRInaute passionné
    Inscrit:
    2 Décembre 2004
    Messages:
    1 109
    J'aime reçus:
    0
    Avant d'enregistrer le mot-clés qui vient d'être recherché, tu comptes le nombre d'enregistrements déjà présents dans ta table.

    Si ce nombre est > 100, tu lances une requête UPDATE au lieu d'un INSERT

    Mais pourquoi tu en veux 100 si tu n'en affiches que 10 ?

    Pour 10 ça ne vaut d'ailleurs pas le coup d'utiliser une base de données... un fichier fera très bien l'affaire.

    Fab
     
  3. code
    code WRInaute impliqué
    Inscrit:
    29 Juillet 2005
    Messages:
    617
    J'aime reçus:
    0
    oui j'ai dit 100 pour exemple mais 10 ça me suffit :) ...

    ok ta solution me semble logique... je vais tester ca et voir si ça marche...
     
  4. blman
    blman WRInaute accro
    Inscrit:
    5 Septembre 2003
    Messages:
    2 719
    J'aime reçus:
    3
    Voila, j'ai un système similaire au tiens. Seulement, je met une date d'enregistrement et vu que je n'affiche que les 30 mots clés les plus tapés dans le mois, je vide tous les enregistrements qui on une date supérieur à 1 mois...
     
  5. code
    code WRInaute impliqué
    Inscrit:
    29 Juillet 2005
    Messages:
    617
    J'aime reçus:
    0
    blman, ta solution me semble appropriée pour ce que je veux faire car un classement des mots les plus recherchés dans le mois est intéressant. J'ajoute donc un champs "date" dans ma table de mots clés. lorsque le mot clé est enregistré, j'enregistre en même temps la date avec un CURRENT_DATE ; par contre peux tu me dire quelle requete tu effectues pour comparer les dates. Car je peux comparer la date actuelle avec la date d'enregistrement et dire que si cette derniere est supérieure à 30 jours, d'effacer tous les mots qui ont une date supérieure. Par contre, ce que je souhaiterais plutot, c'est une remise à 0 le 1er de chaque mois, et non pas avec un décalage de 30 jours, ce qui ne rime à rien en fait. Comment faire ?
     
  6. siddhy
    siddhy WRInaute discret
    Inscrit:
    20 Septembre 2004
    Messages:
    155
    J'aime reçus:
    0
    Salut,

    Pour vider la table le 1er de chaque mois, moi j'aurais fait une fonction qui s'execute lors de la 1ere connexion de la journée et qui verifie si le jour de la date d'aujourd'hui est egal à 1 . si oui je vide la table.

    Si tu peux faire des taches cron, il suffit de lancer ta fonction 1 fois par jour..

    Voila. :)
     
  7. code
    code WRInaute impliqué
    Inscrit:
    29 Juillet 2005
    Messages:
    617
    J'aime reçus:
    0
    Donc du coup c'est encore plus simple parce qu'avec ta solution je n'ai même pas besoin de creer un champs date dans ma table de mots cles. Ta solution est donc pour l'instant la plus simple
     
  8. siddhy
    siddhy WRInaute discret
    Inscrit:
    20 Septembre 2004
    Messages:
    155
    J'aime reçus:
    0
    Si tu n'utilise pas de tache cron, il faut aussi faire attention à ce que la fonction ne s'execute qu'1 seule fois par jour. donc il faut quand meme un champ date quelque part..
    par ex :
    si ma_date != date d'aujourd'hui => on verif si le jour = 1, et on met la date d'aujourd'hui dans le champ ma_date
    sinon c'est que la verif a déja été faire aujourd'hui..

    Donc ce n'est pas plus simple que la solution de blman. mais ce n'est pas non plus exactement la meme fonctionnalité. :)
     
  9. siddhy
    siddhy WRInaute discret
    Inscrit:
    20 Septembre 2004
    Messages:
    155
    J'aime reçus:
    0
    Un autre point qu'il faut prendre en compte :
    Imaginons que pour une raison queconque, le 1er octobre 2005 (par ex) il n'y a aucune connexion.. dans ce cas la table ne serait pas vidée jusqu'au mois prochain ! :cry:

    Il faudrait donc (comme la solution de blman) tester l'ancienneté des enregistrements en plus du reste ...
     
  10. code
    code WRInaute impliqué
    Inscrit:
    29 Juillet 2005
    Messages:
    617
    J'aime reçus:
    0
    franchement si tel était le cas ce serait parcequ'il y a un probleme avec le serveur... Au quel cas je pourrais bien vider la table manuellement le 2 octobre...
     
  11. siddhy
    siddhy WRInaute discret
    Inscrit:
    20 Septembre 2004
    Messages:
    155
    J'aime reçus:
    0
    C'est vrai.
    Mais mieux vaut essayer de penser au pire plutôt que d'être pris au dépourvu plus tard.

    Moi je pense que j'aurais fait le test sur l'ancienneté. histoire de ne plus du tout me soucier de ce point...

    Voila :)
     
  12. code
    code WRInaute impliqué
    Inscrit:
    29 Juillet 2005
    Messages:
    617
    J'aime reçus:
    0
    bon la je suis embrouillé. De toute façon je me suis rendu compte que dans un cas comme dans l'autre il faut bien que j'ai un champs date. OK

    maintenant si je récapitule : un mot clé s'enregistre aujourd'hui avec la date du 29/09/2005 - Quelle fonction dois-je executer pour effacer le contenu de toute la table en début de mois suivant soit le 01/10/2005 ? car actuellement j'ai un probleme de comparaison pour le 31 décembre et le 1er janvier ;)
     
  13. blman
    blman WRInaute accro
    Inscrit:
    5 Septembre 2003
    Messages:
    2 719
    J'aime reçus:
    3
    Code, je comprend pas pourquoi tu veux effacer à partir du 1er car le 1er de chaque mois, ta liste sera vide. Alors que si tu efface toutes les dates supérieures à 30 jours, tes mots clés tournerons sans interruption. Tu affichera alors la liste des mots clés les plus tapés dans les 30 jours courants. (du 1er août 2005 au 1er septembre 2005 par exemple puis du 2 Août 2005 eu 2 septembre 2005, et ainsi de suite)

    Un lien qui te sera util : http://dev.mysql.com/doc/mysql/fr/date- ... tions.html et http://fr2.php.net/date
     
  14. siddhy
    siddhy WRInaute discret
    Inscrit:
    20 Septembre 2004
    Messages:
    155
    J'aime reçus:
    0
    D'accord avec blman :)

    +1 pour les liens..
     
  15. blman
    blman WRInaute accro
    Inscrit:
    5 Septembre 2003
    Messages:
    2 719
    J'aime reçus:
    3
    Allé, voila le code que j'utilise (peut surement être amélioré en 1 seule requête SQL mais moi je peux pas faire autrement vu que j'ai d'autres traitement, en même temps, il faut que je m'y replonge dans ce code car il date un peu)

    $mois_dernier = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
    $mois_dernier=getdate($mois_dernier);

    if(!isset($jdeb)) $jdeb=$mois_dernier["mday"];
    if(!isset($mdeb)) $mdeb=$mois_dernier["mon"];
    if(!isset($ydeb)) $ydeb=$mois_dernier["year"];

    $datedeb=$ydeb."-".$mdeb."-".$jdeb;

    mysql_query("DELETE FROM search_save WHERE date < '".$datedeb."';");
     
  16. code
    code WRInaute impliqué
    Inscrit:
    29 Juillet 2005
    Messages:
    617
    J'aime reçus:
    0
    je suis bien d'accord et c'est ce que je voulais faire au début mais en réfléchissant à la question, je trouvais plus intéressant de présenter les mots cles les plus tapés chaque mois plutot que les 30 derniers jours. Pour la derniere solution je sais bien que c'etait plus simple car je n'ai qu'à comparer la date d'enregistrement avec la date du jour et vérifier si elle est supérieur à 30. Mais la deuxieme solution (effacement en début de chaque mois) me pose un probleme
     
  17. blman
    blman WRInaute accro
    Inscrit:
    5 Septembre 2003
    Messages:
    2 719
    J'aime reçus:
    3
    J'aimerais bien savoir pourquoi tu trouve plus interressant d'afficher les mots clé de chaque mois...

    Sinon, au niveau du code, une petite variante du code que je t'es proposé avant devrait tout à fait convenir. Ca doit pas être bien compliqué...
     
  18. siddhy
    siddhy WRInaute discret
    Inscrit:
    20 Septembre 2004
    Messages:
    155
    J'aime reçus:
    0
    Je ne vois pas bien quel probleme tu as.
    c'est a quel niveau?
     
  19. code
    code WRInaute impliqué
    Inscrit:
    29 Juillet 2005
    Messages:
    617
    J'aime reçus:
    0
    si si le code que tu m'as donné marche à merveille avec une toute petite motif

    $lk = connection_BD();
    $mois_dernier = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
    $mois_dernier=getdate($mois_dernier);

    if(!isset($jdeb)) $jdeb=$mois_dernier["mday"];
    if(!isset($mdeb)) $mdeb=$mois_dernier["mon"];
    if(!isset($ydeb)) $ydeb=$mois_dernier["year"];

    $datedeb=$ydeb."-".$mdeb."-".$jdeb;

    $sql_date = "DELETE FROM mots_rch WHERE date_rech < '.$datedeb.'";
    $res_date = send_sql($sql_date,"mettre a jour la base");

    Pour répondre à ta question siddhy, je ne sais pas quelle requete executer pour vider la table en début de mois, car si je fais une comparaison de mois en ajoutant 1 pour le mois suivant et en vidant la table si j'ai m+1, ca marchera seulement entre janvier et
    décembre mais pas pour le passage de décembre à janvier...
     
  20. blman
    blman WRInaute accro
    Inscrit:
    5 Septembre 2003
    Messages:
    2 719
    J'aime reçus:
    3
    Il faut que tu prenne le problème à l'envers :

    Si tu es le 1er du mois{

    - tu récupère la date courante
    - mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
    - tu efface toutes les dates inférieures à la date courante - 1 mois (Avec la fonction mktime, tu n'aura plus le problème du passage de décembre à janvier)

    }
     
  21. siddhy
    siddhy WRInaute discret
    Inscrit:
    20 Septembre 2004
    Messages:
    155
    J'aime reçus:
    0
    ou alors vu que tu ne veux que les enregistrements du mois en cours :

    si tu es le 1er du mois et que le test n'a pas encore été effectué{
    - tu vides la table.
    - tu indiques dans une variable que le test a été effectué (pour ce mois. donc tu peux mettre la date ou juste la valeur du mois dans cette variable)
    }

    pour voir si tu es le 1er du mois :
    Code:
    if (date("d") == '01')
    Enfin, encore une fois, c'est ce que moi j'aurais fait. Il y a d'autres manières...
     
Chargement...
Similar Threads - limiter nombre enregsitrements Forum Date
Limiter un nombre à une valeur max dans SQL Administration d'un site Web 29 Mars 2018
Comment limiter le nombre de caractères d'un texte Développement d'un site Web ou d'une appli mobile 6 Août 2014
Limiter le nombre de redirections Demandes d'avis et de conseils sur vos sites 25 Septembre 2013
Limiter nombre visiteurs simultanés ? Administration d'un site Web 16 Mars 2012
MAGPIE RSS : Limiter le nombre de caractères "description" Développement d'un site Web ou d'une appli mobile 11 Mars 2011
Limiter nombre de connexions par IP et référencement Débuter en référencement 1 Décembre 2010
Code php pour limiter le nombre de recherche. Développement d'un site Web ou d'une appli mobile 29 Septembre 2010
Limiter le nombre de pages par visiteurs Administration d'un site Web 28 Décembre 2008
limiter le nombre de personnes connectées URL Rewriting et .htaccess 8 Décembre 2008
Limiter le nombre de personnes connectées au site Administration d'un site Web 9 Janvier 2008
Limiter le nombre de téléchargements simultanés Développement d'un site Web ou d'une appli mobile 21 Août 2007
limiter le nombre d'envoi de mails d'une meme ip en php Développement d'un site Web ou d'une appli mobile 15 Mars 2006
Pourquoi limiter le nombre de mots clés dans les meta ? Débuter en référencement 7 Mai 2005
limiter nombre de caractère d'une phrase Administration d'un site Web 9 Septembre 2004
Limiter nombre requetes Administration d'un site Web 29 Octobre 2003
Limiter le nombre de hits par htaccess (ovh 60gp) URL Rewriting et .htaccess 30 Septembre 2003
Limiter la zone d'expédition pour un produit e-commerce 24 Octobre 2019
Arfooo PHP 7 : (2) session_start(): Cannot send session cache limiter Annuaires et moteurs 31 Janvier 2019
Duplicate content, 2 sites, même contenu. Comment limiter les dégâts ? Débuter en référencement 17 Juin 2014
Cannot send session cache limiter - headers already sent en php5 Développement d'un site Web ou d'une appli mobile 14 Mars 2013