EmGeI Posté 20 Juin 2008 Posté 20 Juin 2008 Bonjour à tous, Je me prends la tete pour un formulaire de recherche mais je ne trouve pas la solution. J'ai deux tables : [b]OPERATOR[/b]id_operatorcountry_idoperatorndc[b]COUNTRY[/b]id_countrycountrycc Je dois faire un formulaire de recherche qui me trouve le Country et l'opérator lorsque je tape le NDC et le CC. Le seul problème c'est qu'il y a plusieurs donnée dans le champs ndc. Exemple : OPERATOR 1 | MOBISTAR | 490, 491, 492, 493, 494, 495, 496, 497, 498, 499 COUNTRY BEL | 1 | Belgium | 32 Via le formulaire je dois retrouvé Belgium | Mobistar en tapant par exemple 32492. Là où je bloque en fait c'est comment faire ma requete mysql. Est ce que je créé une nouvelle table OPERATOR_COUNTRY avec les différentes info, ou dois je utiliser un FULLTEXT,...????? Ou puis je le faire directement via mon php??? Je suis complètement perdu donc si quelqu'un avait un début de piste je suis entièrement preneur. D'avance merci.
rdd Posté 20 Juin 2008 Posté 20 Juin 2008 Salut, Tu peux utiliser la fonction REGEXP mysql qui te feras ce que tu veux a merveille. Une piste pour la requete : SELECT operator FROM operator WHERE ndc REGEXP '^$variable_ndc_recup_via_ton_form[^0-9] ' OR ndc REGEXP '[^0-9]$variable_ndc_recup_via_ton_form$' OR ndc REGEXP '[^0-9]$variable_ndc_recup_via_ton_form[^0-9]' Voila, il s'agit d'expression reguliere dans mysql, la premiere regle verifie si le ndc en debut de chaine, le deuxieme verifie le ndc en fin de chaine et le dernier verifie le ndc n'importe ou dans ton champ (parce que d'apres ce que j'ai compris le champs ndc contient les ndc separes par des virgules).
EmGeI Posté 20 Juin 2008 Auteur Posté 20 Juin 2008 Merci pour la réponse je fais le tesst tout de suite.
EmGeI Posté 20 Juin 2008 Auteur Posté 20 Juin 2008 (modifié) Bon j'ai trouvé une requête qui fonctionnait un peu mieux pour ce que je voulais. La requête précédente ne fonctionnant pas. Voici le code de ma page pour le moment : [b]FORMULAIRE DE RECHERCHE[/b]<table class="main" style="width: 100%;" cellspacing="1" cellpadding="4"> <tr class="head"> <td colspan="3" valign="top"> <a href="index.php">Accueil</a> > Information for <?php echo($country); ?> </td> </tr> <tr> <td class="con2" align="left" valign="top" colspan="2"> <table width="100%"> <tr> <td colspan="3" class="con1" align="center"> <form name="reject" method="post" action="req_search.php"> <table> <tr> <td>CC</td> <td><input type="text" name="cc" /></td> </tr> <tr> <td>NDC</td> <td><input type="text" name="ndc" /></td> </tr> <tr> <td colspan="2"><input name="submit" value="Submit" type="submit"></td> </tr> </table> </form> </td> </tr> </table>[b]PAGE DE TRAITEMENT[/b]<?php//Connexion à la DBinclude("includes/connexion.php");if(isset($_GET['cc'])){ $cc=$_GET['cc'];}if(isset($_GET['ndc'])){ $ndc=$_GET['ndc'];}$r = mysql_query("SELECT operator, operator.iso, country, country.iso FROM operator, country WHERE e164_ndc like '%$ndc%' AND country_code = '$cc' and operator.iso = country.iso;") or die ("".mysql_error()); //$r = mysql_query ("SELECT operator FROM operator WHERE e164_ndc REGEXP '^$ndc[^0-9] ' OR e164_ndc REGEXP '[^0-9]$ndc$' OR e164_ndc REGEXP '[^0-9]$ndc[^0-9]';") or die ("".mysql_error()); while($reject=mysql_fetch_array($r)) { $iso = $reject["iso"]; $country = $reject["country"]; $operator = $reject["operator"]; echo $country." ".$operator."<br>"; }?> J'ai un autre soucis. Pour le moment pour mes recherche j'utilise deux INPUT TEXT dans un form et cela fonctionne mais il faudrait que je passe par un seul INPUT. En gros pour le moment je découpe manuellement le nombre. Par exemple : 32498556655 Dans mon champs CC je met 32 et dans mon champs NDC je met 498. Le problème est que les personnes qui vont utilisé la base ne savent pas forcement où découpé. Par exemple : 1306XXXXXXXXX = Canada | Rogers Wireless Inc. 14XXXXXXXXXX = USA | Cingular Wireless. Donc j'aimerais faire mon formulaire de la manière suivante : <table class="main" style="width: 100%;" cellspacing="1" cellpadding="4"> <tr class="head"> <td colspan="3" valign="top"> <a href="index.php">Accueil</a> > Information for <?php echo($country); ?> </td> </tr> <tr> <td class="con2" align="left" valign="top" colspan="2"> <table width="100%"> <tr> <td colspan="3" class="con1" align="center"> <form name="reject" method="post" action="req_search.php"> <table> <tr> <td>MSISDN</td> <td><input type="text" name="MSISDN" /></td> </tr> <tr> <td colspan="2"><input name="submit" value="Submit" type="submit"></td> </tr> </table> </form> </td> </tr> </table> En gros faire une boucle : Si 'premier digit est trouvé dans la base' Afficher le résultat Sinon 'tester les deux premier digit' Sinon 'tester les 3 premier digit' Sinon 'Afficher aucune correspondance' Et ce test doit être fait sur le CC et sur le NDC. Sur le CC pour trouvé le pays et sur le NDC pour trouvé l'opérateur. 32498XXXXXX Belgium | Mobistar 32478XXXXXX Belgium | Proximus J'ai chercher du côté des REGEX, des chaines de caractère, ... Enfin je crois que j'ai fait le tour de tout mais je ne sais pas quelle fonction utilisé ni par où commencer Je m'arrache les cheveux depuis deux jours sur ce truc je vais craquer......... Modifié 20 Juin 2008 par EmGeI
rdd Posté 20 Juin 2008 Posté 20 Juin 2008 Tu peux faire un CONCAT du cc et du ndc lors de ta requete et lorsque tu as une correspondance avec ton input de formulaire et bien tu renvoie le resultat $r = mysql_query("SELECT operator.operator, operator.iso, country.country, country.iso FROM operator, country WHERE CONCAT(operator.e164_ndc, country.country_code) LIKE '$MSISDN%'") or die ("".mysql_error()); Enfin un truc dans le genre (car je n'ai pas la structure exacte de la base), il faudra peut etre que tu rajoutes le and operator.iso = country.iso; a la fin de ta requete pour que ca fonctionne.
EmGeI Posté 20 Juin 2008 Auteur Posté 20 Juin 2008 Je viens de regarder un peu avec cette requete mais il m'affiche une quarantaine d'opérateur qui n'ont rien avoir avec ce que je lui demande. Je vais regarder ca plus en profondeur ce week end et je te dirai si cela fonctionne. Je te remercie quand même quel que soit le résultat.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant