francoisch Posté 3 Décembre 2010 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
Aenoa Posté 3 Décembre 2010 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
jcaron Posté 3 Décembre 2010 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.
francoisch Posté 5 Décembre 2010 Auteur 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
francoisch Posté 5 Décembre 2010 Auteur 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
Ernestine Posté 6 Décembre 2010 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}
Dadou Posté 6 Décembre 2010 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
francoisch Posté 6 Décembre 2010 Auteur 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
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant