{MySQL} Requête DELETE suite à requête SELECT

Fermé
magicbret Messages postés 34 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 13 janvier 2010 - 13 janv. 2010 à 12:09
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 - 29 août 2010 à 02:17
Bonjour,

Je suis en train de créer un script shell visant à supprimer les doublons d'une table. Ce script sera ensuite automatisé par une tâche cron, toute les nuits.

Mon problème est que je dois supprimer plusieurs lignes résultant d'une requete SELECT mais je ne vois pas quelle requête écrire. Toute aide est donc la bienvenue.

Voici le code :

#!/bin/bash
# On récupère la date du jour
now=`date +"%Y-%m-%d"`
echo "ICI_LA_REQUETE_A_INSERER" | mysql database -u username -ppassword


Et la requête SELECT est la suivante :

SELECT RadAcctId,UserName,AcctStartTime,AcctStopTime,AcctSessionTime,NASIPAddress, COUNT(*) FROM radacct GROUP BY UserName, AcctStopTime HAVING COUNT(*) > 1 AND LEFT(AcctStartTime,10) = '$now'

Cette requête me renvoie x résultats, que je dois supprimer par une requête DELETE, le tout de façon automatique.

Merci pour votre aide.

3 réponses

rescue Messages postés 1039 Date d'inscription vendredi 16 novembre 2007 Statut Contributeur Dernière intervention 27 mars 2019 136
13 janv. 2010 à 15:09
Bonjour,

Une requête sql delete porte sur miminum 2 choses la table et un champ de cette table.

Par exemple : DELETE FROM table WHERE champ = 'valeur'

Les valeurs doivent être identique de préférence.
Attention si pas de clause WHERE toutes les données de la table seront supprimées.

@+
0
magicbret Messages postés 34 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 13 janvier 2010 7
13 janv. 2010 à 16:42
Merci. Je m'aperçois que ma demande est un peu floue.

Pour la syntaxe de DELETE, c'est ok. En gros, je pense que je devrais m'orienter vers quelque chose comme :

DELETE FROM radacct WHERE EXISTS ( SELECT.........)

ou

DELETE FROM radacct IN ( SELECT.........)

La requête doit supprimer toute les lignes contenues dans la requête SELECT, qui doit être imbriquée je pense.
0
rescue Messages postés 1039 Date d'inscription vendredi 16 novembre 2007 Statut Contributeur Dernière intervention 27 mars 2019 136
13 janv. 2010 à 17:42
Re,

Oui nous nous sommes compris.
Mais n'empêche que pour la syntaxe avec IN ou EXIST (SELECT ....) faudra bien pointer sur une valeur.

Quelle est la valeur que vous souhaitez supprimer ?

Voyez cette exemple :

DELETE FROM fournisseurs WHERE EXISTS ( select clients.nom from clients where clients.client_id = fournisseurs.fournisseur_id and clients.client_nom= 'MICROSOFT' );

Cette exemple plus complexe va supprimer des enregistrements dans une table basée sur des valeurs dans une autre table.

Bon courage
0
Bonjour
personnellement je débute dans le PHP, avec ce DELETE, puis je avoir une suppression automatique de champs après une date échéante?
2e, est il possible qu'un champ s'affiche de telle date à telle date?
0
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 606
29 août 2010 à 02:17
Le DELETE ne te permettra pas de supprimer des données à une date ou heure précise. Tu dois trouver un moyen extérieur qui, à date ou heure précise, exécutera la requête désirée.

Par ailleurs, à l'avenir, merci de créer un nouveau sujet si le problème est différent de celui du sujet initial :)
0