[RESOLU]Requete SQL d'indicatifs chaud patate

Requete SQL d'indicatifs chaud patate [RESOLU] - SQL/NoSQL - Programmation

Marsh Posté le 11-03-2011 à 10:28:50    

Salut aux pros du SQL, en ce beau vendredi matin je vous propose de m'aider ( :D ) avec une petit requête pas évidente.
 
J'ai une table d'indicatifs:
 
Pays    | Indicatif
Pays0  | 2
Pays1  | 21  
Pays2  | 212
Pays3  | 213
Pays4  | 3
Pays 5 | 321
 
J'ai une table d'appels
 
IdAppel | NumCorrespondant
1         | 276543
2         | 214525
3         | 213987
4         | 365145
5         | 321458
 
J'aimerais (en une requête si possible), réussir a sélectionner le pays selon l'indicatif, la difficulté ici est évidemment que l'indicatif n'est pas de longueur fixe, et sa longueur n'est pas limitée.
IdAppel | NumCorrespondant | Pays
1         | 276543                | Pays0  
2         | 214525                | Pays1
3         | 213987                | Pays3
4         | 365145                | Pays4
5         | 321458                | Pays5
 
J'ai beau creuser je vois pas trop, toute aide serait grandement appréciée  :jap:


Message édité par betsamee le 13-03-2011 à 22:48:56

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

Marsh Posté le 11-03-2011 à 10:28:50   

Reply

Marsh Posté le 11-03-2011 à 11:25:30    

j'ai peut etre une solution, merci de me deire si ca vous semble correct et acceptable niveau optimisation (NumCorrespondant et Indicatif) sont indexes
 
SELECT IdAppel,NumCorrespondant,Pays
FROM Indicatifs INNER JOIN Appels on Indicatif = LEFT(NumCorrespondant,length(Indicatif))
ORDER BY length(Indicatif) DESC
LIMIT 1


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

Marsh Posté le 11-03-2011 à 11:33:54    

meme pas :-(
ca me gardera qu'UN enregistrement alors qu'il m'en faut un PAR appel

 

EDIT :
En fait ceci fonctionne comme un charme, mais est ce optimise?
SELECT IdAppel,NumCorrespondant,
(SELECT Pays WHERE Indicatif = LEFT(NumCorrespondant,length(Indicatif)
ORDER BY length(Indicatif) DESC
LIMIT 1)
FROM Appels


Message édité par betsamee le 11-03-2011 à 11:42:49

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

Marsh Posté le 11-03-2011 à 13:04:50    

Comment tu sais si "213987" correspond à l'indicatif 2, 21, 213, ... ? Tu y va du plus long au plus court?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 11-03-2011 à 13:05:54    

oui
ORDER BY length(Indicatif) DESC
LIMIT 1

 

donc je prend que le plus long qui correspond


Message édité par betsamee le 11-03-2011 à 13:06:30

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

Sujets relatifs:

Leave a Replay

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