francoisch Posted December 3, 2010 Posted December 3, 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
Aenoa Posted December 3, 2010 Posted December 3, 2010 (edited) 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 Edited December 3, 2010 by Aenoa
jcaron Posted December 3, 2010 Posted December 3, 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.
francoisch Posted December 5, 2010 Author Posted December 5, 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
francoisch Posted December 5, 2010 Author Posted December 5, 2010 (edited) 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 Edited December 5, 2010 by francoisch
Ernestine Posted December 6, 2010 Posted December 6, 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}
Dadou Posted December 6, 2010 Posted December 6, 2010 Moi j'aurais mis un index unique sur la colonne en question, et utilisé la méthode 3, c'est bien plus efficace
francoisch Posted December 6, 2010 Author Posted December 6, 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
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now