PHP / LIKE chaine de caractere

Fermé
DAG - 2 sept. 2008 à 16:23
 DAG - 2 sept. 2008 à 18:19
Bonjour,
je suis à la recherche d'une façon simple en php de faire un test sur le début d'une chaîne de caractères.
Je m'explique: j'ai un fichier Excel que je parcours. Il y a deux champs qui m'intéresses plus particulièrement. Ces champs sont le num de tel pro et le num de tel perso. Dans ces deux champs il peut y avoir des numéro de téléphone portable comme des numéro de fixes.

En fait le fichier Excel est changé tous les mois, je l'ai donc déjà extrait dans une table qui me sert de tampon à chaque fois que j'ai nouveau fichier qui arrive.
A coté j'ai une autre table de référence, que je viens mettre à jour grace a la table tampon. Dans cette table j'aimerais différencier les portable des fixes. J'ai donc créé 4 champs : port pro, fix pro, port perso, fix perso.

En gros lorsque je m'occupe du champs tel perso de la table tampon, je souhaiterais remplir les champs fix perso et port perso de la table de référence.

Je souhaiterais traduire "l'algo" suivant en code PHP :

Si le champs tel perso de la table tampon commence par 06.
Alors on update le champs port perso de la table de référence.
Sinon si le champs tel perso de la table tamponest différent de 06.
Alors on update le champs fix perso de la table de référence.

J'ai réussis à comparer les champs en faisant une requete avec une jointure entre les tables, mais je n'arrive pas à détecter le 06. J'ai essayé avec un genre :
explode(".", $num)
ou avec un
strpos
mais ça ne marche qu'a moiter ! Je n'est même pas un dixième des numéros de ma table tampon qui se retrouve dans ma table de référence... Genre sur 4000 numéros, je doit en retrouver à peine une centaine...

Est-ce que quelqu'un aurai une idée ?
Si vous voulez le code je peux le poster.. Il fait une centaine de lignes, je pourrais passer des passages !
A voir également:

7 réponses

Ok, merci bien, je vais tester ça de suite !
0
Ben ça marche pareil que moi... Tous les numéros de fixes (donc le "else" de la boucle) sont ajouter sans probleme. Par contre pour les portables (il y en a 6 dans ma table tampon), je n'en est que 3 d'ajoutés dans ma table de ref...
Je suis allé les voir dans la table tampon, ils sont exactement formé de la meme façon...
Je post mon code... peut etre que quelqu'un y verra une faute !

function tabletampon_od_file()
{
	include '../bdd/connexion_bdd.php';
	
	$statementOdOne = "
SELECT
/*Je sélectionne tous les champs des deux tables (table de référence + table tampon). Donc ici il y a tous les champs : table1.champs1, table1.champs2, table2.champs1....*/
FROM ouvrant_droit INNER JOIN tabletampon_od_file ON
(
tabletampon_od_file.NOM = ouvrant_droit.nom_OD AND
tabletampon_od_file.PRENOM = ouvrant_droit.prenom_OD AND
tabletampon_od_file.DATEDENAISSANCE=ouvrant_droit.date_naissance_OD);";
	
$reqOdOne = mysql_query($statementOdOne);
	
	while ($data = mysql_fetch_array($reqOdOne))
	{
		if(empty($data[tel_fix_prof_OD]))
		{
			if(substr($data[TELPRO], 0, 2) == '06')
			{
				/*Je fais un update dans la table de référence dans le champs des téléphones portables avec la valeur de la table tampon*/
			else
			{
				/*Je fais un update de la table de référence dans le champs des téléphones fixes avec la valeur de la table tampon*/				
			}
		}
/*Après je fais la même boucle mais avec d'autres conditions : si le champs de la table de référence est différent du champs de la table tampon, je complète une autre table qui me sert a remonter des warnings par la suite... Bref*/


Voila bon j'ai virer quelques trucs pour que ça soit plus clair... Le code ne doit pas être des plus propre... J'espère qu'il est tout de même compréhensible ! Et surtout que vous pourrez m'aider :-)
0
Oui j'y est penser, mais je trouvais que ça compliquait vachement le code. Car en fait lorsque je fais la grosse requête du début avec le JOIN, je m'en sert pour le téléphone mais aussi pour plein d'autres information que je compare d'un coup comme la civilité, la ville, le code postale, l'adresse, les adresse mail perso et pro, le statut dans la boite et plein d'autres trucs !
Actuellement mon code devient très limite je trouve car je me trouve avec un fichier de plus de 4000 lignes de code PHP, il m'a fallu désactivé le temps d'exécution de PHP car mon traitement me prend quasiment 10min...
Cependant, je ne pense pas trouver de solutions plus rapides ou plus simples avec MySQL + PHP ?
Même en codant mon application en utilisant la capacité de PHP à traiter des objets je ne crois pas pouvoir gagner beaucoup plus de temps.
Pourtant j'ai une belle bête à disposition : il y a 4 processeurs Xeon à 2,00Ghz et 4Go de Ram avec deux disques durs 15000 tr/min en Raid. J'ai mis Ubuntu...

Bref, je fais une grosse requête et je traite tout dedans. Donc, j'y avait pensé aussi, je ne vois pas trop comment traiter ce que je veux faire via SQL directement... As-tu une idée pour placer ça ?
0
Ah oui tiens ça je ne connais pas ! Je vais peut etre passer par la ! Sinon pour les tableau je vais voir, je vais faire des tests.
En tous cas un grand merci a toi pour ton aide !
A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mouf13 Messages postés 142 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 22 février 2011 17
2 sept. 2008 à 17:01
if(substr($num, 0, 2) == '06') {
echo 'mobile';
} else {
echo 'not mobile';
}
-1
mouf13 Messages postés 142 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 22 février 2011 17
2 sept. 2008 à 17:51
question bete, n'as tu pas interet a selectionner en sql uniquement les numero de portable plutot que de faire ces traitement php.
mysql> SELECT SUBSTRING('Quadratically',5,6);
-> 'ratica'
http://dev.mysql.com/doc/refman/5.0/fr/string-functions.html


Sinon assure toi du bon format des numero sortis
-1
mouf13 Messages postés 142 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 22 février 2011 17
2 sept. 2008 à 18:13
tu devrais alors stocker les resultats dans 2 tableau
1 contenant les mobile un les fixe

et traiter ensuite un tableau puis l'autre.

tu peux aussi executer ton script en console avec le package php-cli
php -f monscript.php
-1