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

magicbret Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -  
HostOfSeraphim Messages postés 6750 Date d'inscription   Statut Contributeur Dernière intervention   -
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.
A voir également:

3 réponses

rescue Messages postés 1039 Date d'inscription   Statut Contributeur Dernière intervention   136
 
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   Statut Membre Dernière intervention   7
 
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   Statut Contributeur Dernière intervention   136
 
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
ChrisCMoi
 
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   Statut Contributeur Dernière intervention   1 608
 
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