[RESOLU] Suppression mysql plus de 7 jours

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 : [RESOLU] Suppression mysql plus de 7 jours

Re: [RESOLU] Suppression mysql plus de 7 jours

par moogli » 25 mai 2013, 17:35

ou utiliser le date_format de mysql.

la solution de yann18 a l'avantage d'être universelle suivant le SGBD (genre date_format pour mysql, to_chat pour oracle, la tu simplifie ta requête.


@+

Re: [RESOLU] Suppression mysql plus de 7 jours

par prohand » 25 mai 2013, 17:35

Ok merci beaucoup :)

Re: Suppression mysql plus de 7 jours

par yann18 » 25 mai 2013, 17:24

Ok, merci pour ta réponse.

PS : Petit question au passage, est-il possible de passer le champ date en dd/mm/yyyy au moins lorsque je l'affiche ?
c'est possible avec DateTime:
    $date = new DateTime('2013-05-25');
    echo $date->format('d/m/Y');
?>

Re: Suppression mysql plus de 7 jours

par prohand » 25 mai 2013, 16:49

Ok, merci pour ta réponse.

Je n'avais pas de données utiles, car c'est un nouveau projet pour moi.
Je viens de passer le champ en type date et j'ai testé ta requêtes avec succès.

Merci pour l'aide apporter et bonne continuation.

PS : Petit question au passage, est-il possible de passer le champ date en dd/mm/yyyy au moins lorsque je l'affiche ?

Re: Suppression mysql plus de 7 jours

par moogli » 25 mai 2013, 16:18

si tu utilisé un champ de type date tu n'aurais pas d'erreur tu ne peux pas faire de calcul sur les dates si le champs n'est pas de type de date.

donc passe le champ datemail en type date et tu n'auras pas de problème.

attention si tu as des données utiles il faut penser à les sauvegarder avant de changer le type de champs, par exemple commence par ajouter un champs date, ensuite tu fait copie, puis tu supprime la colonne d'origine et enfin tu renomme la nouvelle colonne.

c'est très simple et tu peux le faire en SQL (regarde du coté des curseurs).

Certain soft font ce genre de chose pour éviter la perte des données, mais dans ton cas il te faut modifier les données puisse que la date entrée n'est pas au bon format (tu a dd/mm/yyyy alors qu'il faut yyyy/mm/dd) et tu aura forcément une pert de données si tu essai de modifier directement le champs ainsi.
idem si tu essai d'insérer les données existantes dans un champs date (enfin la tu aura une erreur).

donc pour résumer
- ajout d'une nouvelle colonne (disont tmpdate)
- select des données de la colonne datemail + id
- pour chaque ligne de résultat
- modifier la date en yyyy/mm/dd
- update de tmpmail sur la ligne courante (grace à l'id que tu utilise dans le prédicat)
- supprimer la colonne datemail
- renommer tmpdate en datemail

- tester ma requête SQL (DELETE FROM sauvegardes WHERE datemail < DATE_SUB(now(),INTERVAL 7 DAY); ) :mrgreen:
@+

Re: Suppression mysql plus de 7 jours

par prohand » 25 mai 2013, 16:04

Alors voici le create table avec le jeux de données :
--
-- Base de données: `sauvegarde`
--

-- --------------------------------------------------------

--
-- Structure de la table `sauvegardes`
--

CREATE TABLE IF NOT EXISTS `sauvegardes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sujet` varchar(500) CHARACTER SET utf8 NOT NULL,
  `corpsmail` longtext CHARACTER SET utf8 NOT NULL,
  `datemail` varchar(11) NOT NULL,
  `dateactuelle` datetime NOT NULL,
  `etatsauvegarde` varchar(20) NOT NULL,
  `txsauvegarde` int(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=443 ;

--
-- Contenu de la table `sauvegardes`
--

INSERT INTO `sauvegardes` (`id`, `sujet`, `corpsmail`, `datemail`, `dateactuelle`, `etatsauvegarde`, `txsauvegarde`) VALUES
(441, '', '', '23/05/2013', '0000-00-00 00:00:00', '', 0),
(442, '', '', '17/11/2012', '0000-00-00 00:00:00', '', 0);
Et le formulaire :
  <form method="post" action="" name="Suppression">
  <input type="submit" name="Submit" value="Suppression sauvegarde plus de 7 jours">
  </form>
Merci :)

Re: Suppression mysql plus de 7 jours

par moogli » 25 mai 2013, 15:36

est tu certain que la requête est exécutée ?

poste nous le formulaire le create table et un jeux de données que l'on puisse tester.

j'ai testé ma requête (le prédicat en tout cas) et c'est fonctionnel.


@+

Re: Suppression mysql plus de 7 jours

par prohand » 25 mai 2013, 15:24

Je viens de tester et elle ne supprime rien du tout :(
Pourtant j'ai bien mis une date en 2012 pour faire un test
Je n'ai rien dans les logs non plus.

Re: Suppression mysql plus de 7 jours

par yann18 » 25 mai 2013, 14:53

ma première requête est fausse comme l'a signifié précédemment @moogli.

Pa contre la requête çi-dessous devrait fonctionner sans problème. Le principe est le suivant : on fait la différence entre la date d'aujourd'hui et celle qui se trouve en bd(datemail).cette différence donne le nombre de jours puis on compare si le nombre de jours est bien supérieur à 7.
if (!empty($_POST['Submit']) )
  {
   mysql_query("DELETE FROM sauvegardes WHERE TO_DAYS(now() ) - TO_DAYS(datemail) >7 ");
 
  }
En effet cette requête supprime les enregistrement datant de plus de 7 jours c'est bien ce que tu veux?

Re: Suppression mysql plus de 7 jours

par prohand » 25 mai 2013, 13:21

Re,

J'ai testé vos trois scripts mais aucun des trois ne fonctionnent...

Merci

Re: Suppression mysql plus de 7 jours

par moogli » 24 mai 2013, 23:20

@prohand c'est ce que fait le script que je t'ai indiqué


@Yann : il souhaite garder les 7 derniers jours, donc now() semble indiquer a voir :)


@+

Re: Suppression mysql plus de 7 jours

par yann18 » 24 mai 2013, 22:37

salut,

il faut partir de la date connue, sauvegardée en BD, lui ajouté 7 jours pour obtenir une date future puis comparer cette dernière à la date connue:
if (isset($_POST['Submit']) && $_POST['Submit']!="")
  {
   mysql_query("DELETE FROM sauvegardes WHERE datemail <= DATE_SUB(datemail,INTERVAL 7 DAY)");
 
  }
ou encore:
if (isset($_POST['Submit']) && $_POST['Submit']!="")
  {
   mysql_query("DELETE FROM sauvegardes WHERE TO_DAYS(now() ) - TO_DAYS(datemail) >=7 ");
 
  }

Re: Suppression mysql plus de 7 jours

par prohand » 24 mai 2013, 22:34

Salut,

Merci de ta reponse, en faite je veux garder uniquement les 7 derniers jours et supprimer ce qui a plus de 7 jours.

Je ne sais pas si c'est bien clair. :)

Re: Suppression mysql plus de 7 jours

par moogli » 24 mai 2013, 21:57

salut,


en dehors du fait que tu supprime les lignes qui ont une date supérieure ou égale à la date actuelle 7 sept jours (donc en gros tu supprime les sauvegardes des 7 derniers jours aujourd'hui compris) ton code semble fonctionnel.

en fonction de ton titre je ferais ainsi
<?php
if (!empty($_POST['Submit'])) {
    mysqli_query($connexion,"DELETE FROM sauvegardes WHERE datemail < DATE_SUB(now(),INTERVAL 7 DAY)");
}
tu notera l'utilisation de l'extension mysqli plutôt que l'extension mysql qui est obsolète et vouée a disparaître.


@+

Suppression mysql plus de 7 jours

par prohand » 24 mai 2013, 20:40

Bonjour,

Je souhaiterai supprimer via un bouton toutes les données d'une table de plus de 7 jours.
Mon bouton fonctionne sans problème sauf que le DATE_SUB(now(),INTERVAL 7 DAY) ne fonctionne pas.

Aurai-je fais une erreur ?

Je vous passe tout le reste du code (qui fonctionne car j'arrive a afficher les données dans ma page).
if (isset($_POST['Submit']) && $_POST['Submit']!="")
  {
   mysql_query("DELETE FROM sauvegardes WHERE datemail >= DATE_SUB(now(),INTERVAL 7 DAY)");
  }
Merci de votre aide.