Améliorer une requête SQL d'autocompletion
Bonjour
J'essaie d'améliorer un système d'autocompletion (villes) trouvé ici, pour ça je modifie le fichier PHP appelé par JQuery et plus particulièrement la chaine de la requête SQL.
Mon problème est que rien ne marche, alors je me demande si c'est la bonne méthode...
Voici la portion initiale :
Code:
1 2 3 4 5 6 7 8 9 10
| $sql = "SELECT code_postal, nom_ville FROM villes WHERE code_postal LIKE :q1 OR nom_ville LIKE :q2";
$condition = array("q1" => $q.'%', "q2" => $q.'%');
$sth = $db->prepare($sql);
$sth->execute($condition);
//Réception des résultats
while($data=$sth->fetch(PDO::FETCH_OBJ))
{
//mise en forme du retour pour l'interprétation de JQUERY
echo $data->code_postal.' '.utf8_encode($data->nom_ville)."|".$data->code_postal.':'.utf8_encode($data->nom_ville)."\n";
} |
Voici mes tentatives sur la requête (je les mets toutes, bien que je les teste une par une) :
Code:
1 2 3 4 5 6 7 8
| $sql = "SELECT code_postal, nom_ville FROM villes WHERE code_postal LIKE :q1
OR
nom_ville LIKE :q2'%'
OR
nom_ville COLLATE Latin1_general_CI_AI LIKE :q2 COLLATE Latin1_general_CI_AI
OR
nom_ville LIKE REPLACE(:q2, 'st', 'saint')
ORDER BY population"; |
Et voici ce que je cherche à faire :
- ligne3 : le but est que l'autocomplete ne sorte que les villes commençant par l'entrée (si j'entre par exemple 'saint' il renvoie 'Saâne Saint Just') > ça marche avec les 'saint' mais l'autocomplete ne renvoie plus aucune entrée à 1 mot
- ligne5 : rendre le SELECT insensible aux accents > l'autocomplete ne marche plus
- ligne7 : permettre l'entrée 'st' au lieu de 'saint' > idem
- ligne8 : dans la table j'ai une colonne 'population' et j'aimerais qu'elle serve à trier les résultat afin qu'il propose les plus grosses villes en tête de liste > marche pour certaines mais pas pour toutes (?)
Voilà, j'essaie de modifier la requête SQL mais je ne sais pas si j'ai un problème de syntaxe, ni même si c'est la bonne méthode ..
Merci pour votre aide