Comparer les valeurs et inserer une nouvelle fois
Remote
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
j'ai besoin d'aide a propos de ca :
par exemple j'ai une table "client" et une table "societe"
dans la table client on a un champs "nomsociete"
donc ma question est comment faire pour verifier le "nomsociete" depuis les 2tables et l'insere sur une nouvelle table "newsociete"
je dis bien verifier ex => "commentcamarche" et" CommentCamarche"
Merci d'avance
Language : php
BDD: mysql
j'ai besoin d'aide a propos de ca :
par exemple j'ai une table "client" et une table "societe"
dans la table client on a un champs "nomsociete"
donc ma question est comment faire pour verifier le "nomsociete" depuis les 2tables et l'insere sur une nouvelle table "newsociete"
je dis bien verifier ex => "commentcamarche" et" CommentCamarche"
Merci d'avance
Language : php
BDD: mysql
Configuration: Windows / Chrome 79.0.3945.130
A voir également:
- Comparer les valeurs et inserer une nouvelle fois
- Darkino nouvelle adresse - Guide
- Insérer une vidéo dans powerpoint - Guide
- Insérer signature word - Guide
- Extreme download nouvelle adresse - Accueil - Outils
- Insérer liste déroulante excel - Guide
8 réponses
Bonjour
Déjà, pour la comparaison il va te falloir utiliser un IF et la fonction strcmp
https://www.php.net/manual/fr/function.strcmp.php
pour ce qui est ensuite de prendre les données dans la base et éventuellement en insérer de nouvelles dans une table tout dépend si tu utilises musqli ou PDO...
Déjà, pour la comparaison il va te falloir utiliser un IF et la fonction strcmp
https://www.php.net/manual/fr/function.strcmp.php
pour ce qui est ensuite de prendre les données dans la base et éventuellement en insérer de nouvelles dans une table tout dépend si tu utilises musqli ou PDO...
Tu pourrais aussi le faire directement via une requête SQL sans avoir à passer par du PHP.
Cette opération doit être réalisée une seule fois... ou sinon dans quel(s) cas ?
Quelle est la structure de tes trois tables ?
Cette opération doit être réalisée une seule fois... ou sinon dans quel(s) cas ?
Quelle est la structure de tes trois tables ?
Bonjour, :
table 1 => id/nomclient/nomsoc
table 2 => id/nomsoc
table3 => id / nomsoc
c un peut comme la verification des doublons mais plutot verification des valeurs sur les tables
comme j'ai deja dit : par exemple on verifie "Commentcamarche" avec "comment Ca Marche" ca doit nous donner une seul valeur vu que c'est le meme et l'insere sur la table 3
table 1 => id/nomclient/nomsoc
table 2 => id/nomsoc
table3 => id / nomsoc
c un peut comme la verification des doublons mais plutot verification des valeurs sur les tables
comme j'ai deja dit : par exemple on verifie "Commentcamarche" avec "comment Ca Marche" ca doit nous donner une seul valeur vu que c'est le meme et l'insere sur la table 3
en relisant ta question je constate que non seulement les majuscule minuscule peuvent changer mais qu'il peut également y avoir des espaces...
Peux-tu également avoir d'autres caractères comme par exemple des tirets ?
au final le plus simple va être d'utiliser du PHP et de faire un script qui boucle sur ta première table afin de faire les comparaisons.
Il faudra que tu procède un traitement afin d'éliminer tous les caractères parasites tels que les espaces les tirets les points ou autre chose que tu aurais pu laisser...
Peux-tu également avoir d'autres caractères comme par exemple des tirets ?
au final le plus simple va être d'utiliser du PHP et de faire un script qui boucle sur ta première table afin de faire les comparaisons.
Il faudra que tu procède un traitement afin d'éliminer tous les caractères parasites tels que les espaces les tirets les points ou autre chose que tu aurais pu laisser...
Voici une petite fonction pour traiter les chaines avant de faire les comparaisons
Textes identiques
Avec des texts différents
<?php /** * Fonction pour remplacer les caractères accentués, les espaces et les tirets */ function cleanStr($str){ //on supprime les caractères accentués (on les remplace par les caractères non accentués ) $unwanted_array = array( 'Š'=>'S', 'š'=>'s', 'Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y'); $str = strtr( $str, $unwanted_array ); //on supprime les espaces $str = trim(preg_replace('/\s+/', '', $str)); //on supprime les tirets $str = trim(preg_replace('/\-+/', '', $str)); // on retourne le resultat et on met tout en minuscule : return strtolower($str); }
Textes identiques
//Donc reprenons ton exemple : $text1 = "Commentcamarche"; $text2 = "comment Ca Marche"; //on va supprimer les espaces et les éventuels tirets $text1 = cleanStr($text1); $text2 = cleanStr($text2); //on fait la comparaison : if($text1==$text2){ echo "Les texts sont identiques"; }else{ echo "Texts différents !"; } echo "<br>Text1 " . $text1; echo "<br>Text2 " . $text2; echo "<hr>";
Avec des texts différents
//------- TEST 2 , chaines différents --------// //Donc reprenons ton exemple : $text1 = "Commentcamarche.net"; $text2 = "comment-Ca- Marche"; //on va supprimer les espaces et les éventuels tirets $text1 = cleanStr($text1); $text2 = cleanStr($text2); //on fait la comparaison : if($text1==$text2){ echo "<br>1Les texts sont identiques"; }else{ echo "<br>Texts différents !"; } echo "<br>Text1 " . $text1; echo "<br>Text2 " . $text2; echo "<hr>"; ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici le code que j'ai la :
$sql = "SELECT * from client "; $sqlso = "SELECT * FROM societe"; $res=$con->query($sql); $result = mysqli_query($con, $sql); $r=mysqli_query($con,$sqlso); $datas =array(); if (mysqli_num_rows($result) > 0) { $row_count = mysqli_num_rows($result); $row_count1 = mysqli_num_rows($r); $remaining_rows = min($row_count, $row_count1); $data = mysqli_fetch_row($result); $data1 = json_encode($data[2]); $cleanStr = cleanStr($data1); $sqlso="SELECT * FROM societe WHERE nomsociete LIKE'%$cleanStr%'"; $x = mysqli_query($con,$sqlso); while($remaining_rows-- > 0) { $row = mysqli_fetch_assoc($result); $row1 = mysqli_fetch_assoc($x); if($row["nomsociete"] == $row1["nomsociete"]) { echo ' Nom 1: '.$row1["nomsociete"] ; echo ' & Nom 2: '.$row["nomsociete"].' <br/> '; } else{ echo ' ce nom '.$row["nomsociete"].' n\'est pas identique a '.$row1["nomsociete"].' <br/> ' ; } }
EDIT : AJOUT DES BALISES DE CODE
Merci d'y penser à l'avenir !
Bonjour,
Donc voila mnt vu que jai ce resultat j'ai constater qu'il faut verifier chaque enregistrement de la table par tous ceux dans la 2eme table:
exp: la valeur "commentcamarch" sur la table 1 faut que ca se verifie sur toute la table 2 apres ca passe la 2eme valeur... et ca continue je crois qu'il faut une autre boucle pour faire ca nn?
Donc voila mnt vu que jai ce resultat j'ai constater qu'il faut verifier chaque enregistrement de la table par tous ceux dans la 2eme table:
exp: la valeur "commentcamarch" sur la table 1 faut que ca se verifie sur toute la table 2 apres ca passe la 2eme valeur... et ca continue je crois qu'il faut une autre boucle pour faire ca nn?
Qu'as tu essayé ?
Sur quel point bloques tu exactement ?
Voici de quoi t'aider à avancer
Sur quel point bloques tu exactement ?
Voici de quoi t'aider à avancer
//requete sur la table client $sql = "SELECT * from client "; $qClient = mysqli_query($con, $sql); $row_count_client = mysqli_num_rows($qClient); //requete sur la table societe $sqlso = "SELECT * FROM societe"; $qSoc = mysqli_query($con,$sqlso); $row_count_societe = mysqli_num_rows($qSoc); $datas =array(); if ($row_count_client > 0){ //boucle sur les clients while($C = mysqli_fetch_array($qClient, MYSQLI_ASSOC)){ //boucle sur les societes while($S = mysqli_fetch_array($qSoc, MYSQLI_ASSOC)){ //... //ici ton code pour la comparaison // ... } } }else{ echo " Aucun client trouvé !"; }
oui normalement
j'ai ajouter la condition de verification
Voici resultat:
coke n'est pas identique a coca
coca est identique a : coca
cokiLa n'est pas identique a coca
Lacoki n'est pas identique a coca
corki n'est pas identique a coca
telus n'est pas identique a coca
Telus Holding n'est pas identique a coca
coka n'est pas identique a coca
j'ai ajouter la condition de verification
if(cleanStr($S["nomsociete"])==cleanStr($C["nomsociete"]))
{
echo $C["nomsociete"] ;
echo ' est identique a : '.$S["nomsociete"].' <br/> ';
}
else
{
echo $S["nomsociete"].' n\'est pas identique a '.$C["nomsociete"].' <br/> ' ;
}
Voici resultat:
coke n'est pas identique a coca
coca est identique a : coca
cokiLa n'est pas identique a coca
Lacoki n'est pas identique a coca
corki n'est pas identique a coca
telus n'est pas identique a coca
Telus Holding n'est pas identique a coca
coka n'est pas identique a coca
Avec ce script, tu n'auras que les sociétés qui sont présentes dans la table "client" et qui existeraient également dans la table société.
Mais si c'est juste pour avoir la liste des sociétés "uniques"... qu'elles soient présentes ou non dans les deux tables, tu peux faire un truc encore mieux je pense...
un truc du genre :
NB : Merci à l'avenir d'utiliser correctement les balises de code (en y précisant le LANGAGE ) afin que l'on ait la coloration syntaxique, l'indentation et le numéro de lignes.
Comme les codes que je te postes....
//requete sur la table client $sql = "SELECT DISTINCT nomsociete from client ORDER BY nomsociete"; $qClient = mysqli_query($con, $sql); $row_count_client = mysqli_num_rows($qClient); //requete sur la table societe $sqlso = "SELECT DISTINCT nomsociete FROM societe ORDER BY nomsociete"; $qSoc = mysqli_query($con,$sqlso); $row_count_societe = mysqli_num_rows($qSoc); $datas =array(); if ($row_count_client > 0){ //boucle sur les clients while($C = mysqli_fetch_array($qClient, MYSQLI_ASSOC)){ $ns_client = $C["nomsociete"]; echo " <br><b> nomsociete de CLIENT : </b>" . $ns_client; //boucle sur les societes while($S = mysqli_fetch_array($qSoc, MYSQLI_ASSOC)){ $ns_societe = $S["nomsociete"]; echo " <br>nomsociete de SOCIETE : " . $ns_societe; if(cleanStr($ns_client)==cleanStr($ns_societe)){ echo "IDENTIQUES"; }else{ echo "différents"; } } } }else{ echo " Aucun client trouvé !"; }
Mais si c'est juste pour avoir la liste des sociétés "uniques"... qu'elles soient présentes ou non dans les deux tables, tu peux faire un truc encore mieux je pense...
un truc du genre :
$sql = " SELECT DISTINCT nomsociete FROM ( SELECT nomsociete FROM client UNION SELECT nomsociete FROM societe ) T ORDER BY nomsociete"; $qAll = mysqli_query($con,$sql); $prec = NULL; $cur = NULL; $datas = array(); while($R = mysqli_fetch_array($qAll, MYSQLI_ASSOC)){ $cur = $R['nomsociete']; if(cleanStr($cur) == $prec ){ //identiques ! echo $cur . " (" . cleanStr($cur) .") ". " existe déjà !<br>"; }else{ //"nouvelle" société $datas[] = $cur; //on la stocke dans l'array $datas } $prec = cleanStr($cur); } echo "<br>Liste des societés 'uniques' <pre>"; print_r($datas); echo "</pre>";
NB : Merci à l'avenir d'utiliser correctement les balises de code (en y précisant le LANGAGE ) afin que l'on ait la coloration syntaxique, l'indentation et le numéro de lignes.
Comme les codes que je te postes....
Merci pour votre reponse
je check la fonction strcmp
pour ta question j'utiilise mysqli