Bonjour à tous,

J'ai découvert et suivi le très bon tuto "d'ajax - une autocomplétion pas à pas".
J'ai voulu l'adapter à mon application actuelle.
Je développe en Php/MySQL une page qui va référencer le bottin administratif (donc base de données d'un peu plus de 20.000 entrées !). J'ai deux champs, Nom et Fonction exercée. Je cherche déjà à ce que le champ nom puisse marcher en utilisant l'autocomplétion. Pour cela, dans le fichier options.php qui contient les suggestions, j'effectue avant une requête SQL (me listant tous les noms)et je répertorie tous les noms dans un array. Mais problème, le fait de faire mysql_connect, mysql_query() ralentit le système et la recherche ne marche pas ... Et je suis sûr que le problème vient de là. Ma requête me renvoit 9.000 entrées. Il y a une méthode plus souple ou bien une astuce ?

Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
<?php
header('Content-Type: text/xml;charset=utf-8');
echo(utf8_encode("<?xml version='1.0' encoding='UTF-8' ?><options>"));
if (isset($_GET['debut'])) {
    $debut = utf8_decode($_GET['debut']);
} else {
    $debut = "";
}
$debut = strtolower($debut);
 
mysql_connect("","","");
mysql_select_db("");
 
 
 
			   $reponse = mysql_query("
					   SELECT distinct
					   PERSONNE.PER_NOM as 'Nom_de_la_personne'
					   FROM triplet
 
					   INNER JOIN PERSONNE on TRIPLET.TRI_PER_CLE=PERSONNE.PER_CLE
					   INNER JOIN ORGANISME on TRIPLET.TRI_ORG_CLE=ORGANISME.ORG_CLE
					   INNER JOIN FONCTION on TRIPLET.TRI_FON_CLE=FONCTION.FON_CLE
 
					   WHERE PERSONNE.PER_NOM <> ''
					   ORDER BY PERSONNE.PER_NOM ASC");
 
$listeNom = array();
 
while ($donnees = mysql_fetch_array($reponse) )
{
   array_push ($listeNom , $donnees['Nom_de_la_personne']);
}
mysql_close();
 
 
 
 
function generateOptions($debut,$listeNom) {
    $MAX_RETURN = 10;
    $i = 0;
    foreach ($listeNom as $element) {
        if ($i<$MAX_RETURN && substr($element, 0, strlen($debut))==$debut) {
            echo(utf8_encode("<option>".$element."</option>"));
            $i++;
        }
    }
}
 
generateOptions($debut,$listeNom);
 
echo("</options>");
 
 
?>
Je suis sur que ma requête fonctionne, que mon tableau ListeNom est bien rempli et que tous les éléments sont des chaînes de caractères.

En espérant une réponse ! Merci d'avance .