Page 1 sur 1

Requête pour effacement DB

Posté : 17 avr. 2006, 09:48
par Valentin
Bonjour :D
Voilà, j'ai un peu de mal pour une requête qui m'efface toute les données de la table alors que ce n'est pas ce que je cherche :P

La voici:
		$sql_info = mysql_query("SELECT id FROM tmos_players");
		while($donnees_info = mysql_fetch_array($sql_info)) {
		$idjoueur = $donnees_info['id'];
		mysql_query("DELETE from tmos_results WHERE playerid!='".$idjoueur."'");
		}
Je voudrais que lorsqu'un ID de ma table "tmos_players" n'existe pas dans ma table "tmos_results", il soit effacé de celle-ci.
Je pensais qu'en faisant ça ca allait marcher, et en fait non, ça efface toutes les données de la table :oops:
J'imagine que c'est tout bête mais là j'ai du mal :wink:

Posté : 17 avr. 2006, 10:13
par Dominic
Tu as pris le pb à l'envers, c'est la table tmos_results
qu'il faut inspecter avec while et vérifier si l'id existe ou non dans tmos_players et ensuite delete s'il n'y est pas

Posté : 17 avr. 2006, 10:27
par Valentin
Merci, mais ça revient au même, toutes les données sont encore effacées :roll:

Posté : 17 avr. 2006, 10:46
par zeus
A la vue de cette requete, tu supprimes tous les enregistrements dont l'id est différent de celui que tu viens de récupérer
"DELETE from tmos_results WHERE playerid!='".$idjoueur."'"
Le résultat de cette requete est donc que tout les enregistrements autre que celui que tu veux sauvegarder est supprimé ... Dans le cas où ta 1ere requete retourne au moins 2 enregistrements, ta seconde table est vidée.

Ce que je te conseille de faire, c'est de récupérer tout les id dans un tableau et ensuite, de supprimer de ta seconde table tout les id qui ne sont pas dans ce tableau. cette methode représente, selon moi, 2 avantages :
- eviter de vider la table
- 1 seule requete de suppression

Voiçi le code associé
$sql_info = mysql_query("SELECT id FROM tmos_players");

//Instanciation du tableau de stockage des id
$a_id = array();

//Récupération des id a sauvegarder
while($donnees_info = mysql_fetch_array($sql_info)) {
  $a_id[] = $donnees_info['id'];
}

//Construction d'une chaine de caractère contenant les id a sauvegarder, à utiliser dans la requete SQL
$str_id = implode(", ", $a_id);

//Supression de tous les enregistrements dont les id ne sont pas dans la table tmo_players
mysql_query("DELETE from tmos_results WHERE playerid NOT IN (".$str_id.")");

Posté : 17 avr. 2006, 13:21
par Valentin
Et ben c'est super gentil d'avoir fait ça, tout fonctionne au poil, merci beaucoup zeus :D

Posté : 18 avr. 2006, 10:19
par zeus
Est-ce que tu as compris ce que j'ai fait et la différence avec ton code ?

Posté : 18 avr. 2006, 18:39
par Valent1
j'ai voulu éditer mon message après l'avoir posté mais comme je ne suis pas enregistré... je voulais justement rajouter que oui j'ai bien compris ce qui n'allait pas et pourquoi ca marche maintenant :)