Trouver un l'indicatif le plus proche en SQL

Trouver un l'indicatif le plus proche en SQL - SQL/NoSQL - Programmation

Marsh Posté le 31-08-2009 à 09:05:49    

Bonjour ,  
J'ai un problème assez simple
 
Une table indicatifs contenant des données de ce type:
 
01
012
01234
0245
06
061
.....
 
j'aimerais construire une requête qui me donne pour un input donne , l'indicatif qui lui correspond (le plus proche)
 
par exemple , avec les données de ma table si mon input est 0123785412 je recois 012, si par contre l'input est 01234785214 je recois 01234
 
merci de votre aide


---------------
un blog sur Asterisk
Reply

Marsh Posté le 31-08-2009 à 09:05:49   

Reply

Marsh Posté le 31-08-2009 à 09:50:51    

Sans + d'infos, je dirais que connaissant dans ta base le nb de caractères du plus long indicatif, tu vas de voir lancer n requêtes en base.
Ex : si ton plus long indicatif est de 5 caractères et que ton input est 0123785412, alors tu vas lancer une 1ère requête avec les 5 premiers caractères de ton input et si pas de résultat, ben avec les 4 premiers... jusqu'à ce que tu trouves l'indicatif.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 31-08-2009 à 10:11:56    

un truc dans le genre, et la en fonction de ton sgbd et de ta manière d'interfacer les données tu choppes le premier record ou si tu as accès a des fonctions avancées tu les utilises.
 

Code :
  1. SELECT i.indicatif
  2. FROM tbl_indicatifs i
  3. WHERE substr(param_le_numero,1,length(i.indicatif)) = i.indicatif
  4. ORDER BY length(i.indicatif) DESC

Reply

Marsh Posté le 31-08-2009 à 14:21:24    

merci de votre aide je pense que la solution de casimimir est nickel


---------------
un blog sur Asterisk
Reply

Marsh Posté le 01-09-2009 à 10:19:51    

Plutôt que d'utiliser SUBSTR, j'utiliserais "param_le_numero  LIKE concat(i.indicatif, '%')" dans la requête de casimimir. Ca peut éventuellement améliorer légèrement les perfs.
 
Autre point, dans la table des indicatifs, stocker le length() de l'indicatif, histoire de ne pas avoir à le recalculer à la volée.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed