francoisch Posté 3 Décembre 2010 Partager Posté 3 Décembre 2010 Bonjour Une question de base de Sql: je veux enregistrer des données dans une table mais jignore si cet enregistrement est nouveau (Insert) ou sil existe déjà (Replace). Lexistence, ou pas, dune ligne tient pour moi à la présence, ou pas, dune valeur donnée dans une colonne identifiée. Est-ce que je fais dabord un Select pour rechercher lexistence éventuelle de cette valeur et je choisis ensuite entre Insert et Replace ? Par avance merci de votre aide, en souhaitant votre indulgence pour une question semblable. Francois Lien vers le commentaire Partager sur d’autres sites More sharing options...
Aenoa Posté 3 Décembre 2010 Partager Posté 3 Décembre 2010 (modifié) tu peut effectuer une condition PHP pour vérifier si elle existe // on compte le nombre d'entrées avec le contenu entré par l'utilisateur$nb2resultats = mysql_num_rows(mysql_query('SELECT * FROM ma_table WHERE variable1 LIKE '.$_POST['champ_entré_1'].' '));// SI aucune entréeif($nb2resultats == 0){// on "INSERT" la donnéemysql_query('INSERT INTO ma_table VALUES()');}// AUTRE SOLUTION : Si il y a une ou plusieurs entrées correspondanteselseif($nb2resultats >= 1){// on effectue un updatemysql_query($blablablabla);}// SI AUTRE (ni 0 ni plus = il doit y avoir un problème...else{print("Erreur de requête. Désolé");} Edit : j'ai pas vu que tu était si actif sur le forum, tu doit sans doute avoir pensé a cette hypothèse w_w Modifié 3 Décembre 2010 par Aenoa Lien vers le commentaire Partager sur d’autres sites More sharing options...
jcaron Posté 3 Décembre 2010 Partager Posté 3 Décembre 2010 Méthode #1: - select -> insert ou update comme évoqué plus haut Méthode #2: - update, vérifier le nombre de lignes modifiées avec mysql_affected_rows, si 0 -> insert Méthode #3: - insert ... on duplicate key update ... http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html La méthode #3 requiert qu'il y ait une primary key ou un index unique sur la colonne en question, et n'est pas forcément portable sur d'autres SGBD que mysql. Jacques. Lien vers le commentaire Partager sur d’autres sites More sharing options...
francoisch Posté 5 Décembre 2010 Auteur Partager Posté 5 Décembre 2010 bonjour et merci de vos réponses. Je vais utiliser la méthode 1 qui a le mérite de la simplicité; par ailleurs, ma colonne pivot n'est pas la clé de cette table. Merci encore. Francois Lien vers le commentaire Partager sur d’autres sites More sharing options...
francoisch Posté 5 Décembre 2010 Auteur Partager Posté 5 Décembre 2010 (modifié) Bonjour Il me manque quelque chose là : je teste si une ligne existe avec une valeur donnée dans une colonne : $requete = "SELECT * FROM ".$table." WHERE espxxx='".$espxxx."'";$result = mysql_query($requete,$connexion); requete: SELECT * FROM siteProfil WHERE espxxx='espceg02m'result : Resource id #11if(!$result) { // Non, l'enregistrement n'existe paselse { // Oui, l'enregistrement existe déjà En réalité, la valeur nexiste pas dans cette colonne dans aucune des lignes mais mon test if(!$result) envoie sur le code prévu pour lenregistrement qui existe. Merci par avance de votre aide. Francois Modifié 5 Décembre 2010 par francoisch Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ernestine Posté 6 Décembre 2010 Partager Posté 6 Décembre 2010 Pourquoi n'utilises-tu pas la fonction mysql_num_rows, qui compte le nombre d'enregistrements trouvés ? $requete = "SELECT * FROM ".$table." WHERE espxxx='".$espxxx."'";$result = mysql_query($requete,$connexion);if (mysql_num_rows($result) == 0) { // non l'enregistrement n'existe pas}else { // oui l'enregistrement existe} Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dadou Posté 6 Décembre 2010 Partager Posté 6 Décembre 2010 Moi j'aurais mis un index unique sur la colonne en question, et utilisé la méthode 3, c'est bien plus efficace Lien vers le commentaire Partager sur d’autres sites More sharing options...
francoisch Posté 6 Décembre 2010 Auteur Partager Posté 6 Décembre 2010 Merci de vos réponses à tous les deux. Le choix de la solution était difficile, j'ai penché du coté d'Ernestine, en particulier parce que mon code était tout prêt pour ça. Tout fonctionne grace à vos conseils, merci encore. Francois Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant