Page 1 sur 2
[Résolu] Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 12:21
par fabulon
Bonjour,
Je dois retrouver dans 2 bases distinctes des individus communs.
Je suis parvenu à coder mes requêtes en php, et cela fonctionne à peu près bien.
Seul problème: dans une base les individus sont en majuscules, et dans l'autre, il y a des majuscules, des minuscules, et des ACCENTS.
J'ai contourné le problème des majuscules/minuscules avec un strtolower, mais il me reste le souci des accents.
Comment m'y prendre afin que le champ chloe soit reconnue comme étant le même que chloé ???
Idem pour le ï , etc...
J'ai pensé au départ à l'import de mes bases en choisissant un jeu de caractères différent, mais sans résultat.
Help!
Merci...
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 12:52
par mauvais
Avec des preg_replace peut-être.
$nom = preg_replace('#[éèêë]#', 'e', $nom);
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 14:39
par stealth35
mais non,
normalement si ton charset est bien choisie il fais les correspondances pour les accents, en SQL c'est fait exprès pour
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 14:59
par fabulon
mais non,
normalement si ton charset est bien choisie il fais les correspondances pour les accents, en SQL c'est fait exprès pour
Est-ce que tu pourrais préciser un peu cette histoire de charset ? Je débute...
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 15:01
par fabulon
mais non,
normalement si ton charset est bien choisie il fais les correspondances pour les accents, en SQL c'est fait exprès pour
Ton idée fonctionne.
J'ai fait marcher mon script pour une dizaine d'éléments, ça tourne.
En revanche, pour ma liste de plus de 2000 utilisateurs, je suis confronté au maximum execution time de 30s.
J'ai beau modifié le php.ini, ça ne change rien, ça reste à 30S. Et puis de toute façon, sur un site hébergé, je ne pourrais pas modifier ce paramètre.
Une idée?
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 15:06
par stealth35
montre ton code
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 15:07
par fabulon
Le voici:
<?php
// Connection à mysql
include('connexion.php');
// fin de la partie connexion
$requete="SELECT * from ent"; // requête proprement dite
$result = mysql_query($requete) or die(mysql_error()); // envoi de la requête
while($row = mysql_fetch_array($result)) { //le résultat revient sous forme d'une matrice
$UID_ENT = $row['UID_ENT'];
$PRENOM = $row['PRENOM'];
$PRENOM = preg_replace('#[éèêë]#', 'e', $PRENOM);
$PRENOM = preg_replace('#[ï]#', 'i', $PRENOM);
$PRENOM = preg_replace('#[äà]#','a',$PRENOM);
$PRENOM = preg_replace('#[öô]#','o',$PRENOM);
$PRENOM = preg_replace('#[ç]#','c',$PRENOM);
$requete2="UPDATE ENT SET PRENOM = '$PRENOM' WHERE UID_ENT = '$UID_ENT'" ; // requête proprement dite
$result2 = mysql_query($requete2) or die(mysql_error()); // envoi de la requête
}
?>
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 15:16
par stealth35
a quoi sert le code à part supprimé les accents ?
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 15:19
par fabulon
Celui-ci ne sert qu'à supprimer les accents.
Ensuite, j'ai un autre fichier qui compare les champs. En voici le code:
<?php
// Connection à mysql
include('connexion.php');
// fin de la partie connexion
$requete="SELECT * from magret"; // requête proprement dite
$result = mysql_query($requete) or die(mysql_error()); // envoi de la requête
while($row = mysql_fetch_array($result)) //le résultat revient sous forme d'une matrice
{
$CLASSE_MAGRET = $row ['CLASSE'];
$NOM_MAGRET = $row['NOM'];
$PRENOM_MAGRET = strtolower($row['PRENOM']);
$UID_ENT = $row['UID_ENT'];
if ($UID_ENT == '#') {
$requete2="SELECT * from ENT"; // requête proprement dite
$result2 = mysql_query($requete2) or die(mysql_error()); // envoi de la requête
while($row2 = mysql_fetch_array($result2)) //le résultat revient sous forme d'une matrice
{
$CLASSE_ENT = $row2 ['CLASSE'];
$NOM_ENT = $row2['NOM'];
$PRENOM_ENT = strtolower($row2['PRENOM']);
$UID_ENT = $row2['UID_ENT'];
IF (($NOM_MAGRET == $NOM_ENT) && ($PRENOM_MAGRET == $PRENOM_ENT) && ($CLASSE_MAGRET == $CLASSE_ENT)) {
$requete3="UPDATE MAGRET SET UID_ENT = '$UID_ENT' WHERE NOM = '$NOM_MAGRET'&& PRENOM = '$PRENOM_MAGRET' && CLASSE = '$CLASSE_MAGRET'" ; // requête proprement dite
$result3 = mysql_query($requete3) or die(mysql_error()); // envoi de la requête
}
}
}
}
?>
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 15:20
par stealth35
met la balise PHP du forum on verra mieux
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 15:27
par fabulon
Tu as raison, c'est mieux comme ça!

Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 15:30
par stealth35
ça peux se faire en une seule requête :
UPDATE `magret`, `ent`
SET `magret`.`uid_ent` = `ent`.`uid_ent`
WHERE `magret`.`nom` = `ent`.`nom`
AND `magret`.`prenom` = `ent`.`prenom`
AND `magret`.`class` = `ent`.`class`
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 15:35
par fabulon
Ah pardi... c'est mieux que ma triple requete...
Et pour ce qui est du problème d'accent? Est-ce que cela peut se faire sans le premier fichier?
Tu m'avais parlé de charset !?
Sinon, comment outrepasser ce souci de maximum execution time quand je veux remplacer mes accents?
Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 15:40
par stealth35
Ah pardi... c'est mieux que ma triple requete...
Et pour ce qui est du problème d'accent? Est-ce que cela peut se faire sans le premier fichier?
Tu m'avais parlé de charset !?
Sinon, comment outrepasser ce souci de maximum execution time quand je veux remplacer mes accents?
il faut que les table est le même charset (et même collation)
ex : latin1_swedish_ci
chaset : latin1
collation : swedish
ci : case insensitive
ton script est long car tes requêtes ne sont pas bonne, la condition sur le # n'est pas bonne, essaye de comprendre pas à pas ce que t'as écris tu verras que ca n'as pas trop de sens

Re: Comparaison d'éléments avec accents dans 2 bases
Posté : 04 mars 2011, 16:04
par fabulon
le # est juste une marque pour savoir quels UID ont été remplis et ceux non.
C'est sur que cela fait des requêtes...
Pour régler les tables, c'est dans phpmyadmin? (j'utilise wamp...)