Retour de DELETE en sql?

cs_nlh Messages postés 93 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 9 décembre 2007 - 21 juil. 2004 à 09:54
cs_nlh Messages postés 93 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 9 décembre 2007 - 21 juil. 2004 à 14:38
Bonjour bonjour,

j'ai une ptite question sql..., voila :
je voudrai connaitre le nombre d'adresses qui ont été supprimées lors d'une requete DELETE

par exemple :

ma_table

id type
| 1 | a |
| 2 | b |
| 3 | a |

je fait :
DELETE from ma_table where type='a'
et ce qui serai super bien ca serai que sa me retourne les enregistrements supprimés :

id type
| 1 | a |
| 3 | a |

ou au moins que sa me retourne le nombre d'enregistrements supprimés :

| 2 |

donc voila... et tout ca en passant par un minimum de requete, je ne peux pas faire un select avant pour compter ou afficher celle qui vont etre supprimés sinon sa serai trop simple... :)

merci d'avance si vous avez la soluc a ce probleme
a+
A voir également:

5 réponses

cs_nlh Messages postés 93 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 9 décembre 2007 1
21 juil. 2004 à 14:38
OUAIIIIIIIIIIIIIIIII merci R@f tu m'as mi sur la bonne voie....
alors a savoir quand on fait un delete sans clause where, il retourne 0... mais sinon il retourne le nombre d'enregistrement supprimés...

Dans mon cas j'utilise un clause where... et pour savoiar combien d'enregistrement on été supprimé, il suffit de me servir de la fonction mysql_affected_rows(), ca sert a recuperer le nombre d'enregistrement affectés par la derniere requete.....

ducoup :
mysql_query("DELETE FROM ma_table WHERE CLE1='a' AND CLE2='1'");
echo mysql_affected_rows(); //retourne 1

mysql_query("DELETE FROM ma_table WHERE CLE1='f' AND CLE2='3'");
echo mysql_affected_rows(); //retourne 0

voila merki bokou..... a++
1
toniog1 Messages postés 11 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 13 décembre 2004
21 juil. 2004 à 10:24
Salut,
alors tu peut proceder ainsi si tu veux:

$requete=mysql_query("SELECT * FROM ma_table WHERE type='$a'");

$nbenregistrements=mysql_num_rows($requete);// cela te donne le nombre d'ocurence d'entrée ayant leur type égale à la variable $a dans ma_table

// Si tu souhaites obtenir les valeurs avant de les effacées et bien ici tu les extrait par exemple :


while($entree=mysql_fetch_array($test))
{

echo $entree["type"];//je reconnait quela n'a aucun interet d'afficher cette valeur mais je ne connait pas la structure de ta table et ce que tu souhaites afficher

}
//Voila et la maintenant tu delete

$requete=mysql_query("DELETE FROM ma_table WHERE type='$a'");

Si t'as besoin de plus de details n'hesite pas

@+
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
21 juil. 2004 à 10:58
Salut!
Effectivement: Tu fais un select count(*) avec la condition que tu vas utilise pour la suppression...

Ensuite:
$result = mysql_query("DELETE FROM table WHERE $condition");
if($result)
echo 'Suppression: OK';
else
echo 'Suppression: Erreur';


@++

R@f

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"

www.progforum.net: Aide en programmation!
0
cs_nlh Messages postés 93 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 9 décembre 2007 1
21 juil. 2004 à 12:37
merci de vos reponse.. mais en fait sa ne solutionne pas mon blem.... a savoir que je ne peux pas faire un select avant sinon sa serai trop simple...
en fait pour vous detailler un peu plus le probleme :
j'ai une table a deux cle primaire ici :

ma_table
CLE1 CLE2
a 1
b 4
c 2
d 3
e 5

et j'ai une liste a supprimer dans un fichier...
a-1
b-4
f-3

si je suis votre methode sa veut dire que je fait un select avant de supprimé en prenant chaque ligne et fesant un requete comme ca :
SELECT * FROM ma_table WHERE CLE1='a' AND CLE2='1' OR CLE1='b' AND CLE2='4' OR CLE1='f' AND CLE2='3';

la effectivement je vais savoir combien vont etre supprimés et les quels, c'est a dire les deux la : (vu que le couple f/3 n'existe pas dans la table ci dessus)...

CLE1 CLE2
a 1
b 4

et apres ca je ferai mon delete avec la meme clause where... :
DELETE FROM ma_table WHERE CLE1='a' AND CLE2='1' OR CLE1='b' AND CLE2='4' OR CLE1='f' AND CLE2='3';

comme ca c'est tout bon sa repond bien a tout ce que j'ai demander...

mais mon probleme c'est que ma_table dans la realité compte plus de 100 000 enregistrement et que les fichiers contenant les liste a supprimés peuven en contenir presque 50 000...
ducoup mon probleme sera que les 2 requetes feront bien vite plus de plusieur million de caracteres chacune...

et je ne sais pas si il y a une limite, mais je ne suis pas sur mon propre serveur, et je ne me voit pas imposer des requete si lourde a mon hebergeur...

ducoup pour le moment ce que je fait, je ne sais pas si c'est vraiment mieux :

je prend chaque ligne de mon fichier et je les supprime dans ma base une par une...
sa me donne :
DELETE FROM ma_table WHERE CLE1='a' AND CLE2='1'
DELETE FROM ma_table WHERE CLE1='b' AND CLE2='4'
DELETE FROM ma_table WHERE CLE1='f' AND CLE2='3'

ducoup sa me fait plein de petites requetes, et je voudrai pouvoir connaitre leur retour... c'est a dire que les deux premiere me renvoi 1 et la derniere 0 parceque l'enregistrement qu'elle a tenter d'effacer n'existe pas...

donc voila, si vous avez une soluc a ca, ou meme une meilleur methode je suis preneur....

merci encore de vos reponses...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
21 juil. 2004 à 14:02
Salut!
Je viens de voir un truc, tu peux essayer:
// http://dev.mysql.com/doc/mysql/fr/DELETE.html

Si vous voulez vraiment savoir combien d'enregistrements ont été effacés quand vous videz une table, et que vous êtes prêts à souffrir d'un léger ralentissement, vous pouvez utiliser une requête DELETE de ce genre :

mysql> DELETE FROM nom_de_table WHERE 1>0;



@++

R@f

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"

www.progforum.net: Aide en programmation!
0
Rejoignez-nous