Requête pour effacement DB

Valentin
Invité n'ayant pas de compte PHPfrance

17 avr. 2006, 09:48

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:

Eléphant du PHP | 136 Messages

17 avr. 2006, 10:13

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

Valentin
Invité n'ayant pas de compte PHPfrance

17 avr. 2006, 10:27

Merci, mais ça revient au même, toutes les données sont encore effacées :roll:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 avr. 2006, 10:46

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.")");
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Valentin
Invité n'ayant pas de compte PHPfrance

17 avr. 2006, 13:21

Et ben c'est super gentil d'avoir fait ça, tout fonctionne au poil, merci beaucoup zeus :D

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 avr. 2006, 10:19

Est-ce que tu as compris ce que j'ai fait et la différence avec ton code ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Valent1
Invité n'ayant pas de compte PHPfrance

18 avr. 2006, 18:39

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 :)