Avatar billede preben.m Nybegynder
24. juli 2006 - 21:54 Der er 11 kommentarer og
1 løsning

Bedste match (omvendt søgning)

Forstil du har en tabel med en række prefix til telefon nr.

Prefix type
20    mobil
21    mobil TDC
30    mobil
3011  mobil Sonofon
40    mobil
409    ISDN
7894  Prefix til kendt operatør

hvis man nu kender har fået 8 cifferet nummer man skal matche op mod ovenstående liste hvorledes gøres det mest optimalt. Jeg kunne løse det med selv at programmere mig ud af det men jeg ønsker at MySQL selv kan klare dette, er det muligt og hvordan.

p.s det er vigtigt der kun bliver returneret et svar eller at svarne kommer med bedste match først
Avatar billede arne_v Ekspert
24. juli 2006 - 22:06 #1
Det er vel nemt hvis prefix feltet er VARCHAR:

... WHERE tlf LIKE CONCAT(prefix,'%') ORDER BY LENGTH(prefix)
Avatar billede arne_v Ekspert
24. juli 2006 - 22:06 #2
INTEGER er noget mere tricky !
Avatar billede preben.m Nybegynder
24. juli 2006 - 22:32 #3
Godaften Arne tak for svaret sidst, desværre er det ikke VarChar, men man kan vel lave en form for typecasting ???. Men det betyder ikke det store om nr. står som int eller varChar som ikke om jeg bare skulle ændre dem. Om ikke andet er jeg godt tilfreds med svaret...
kan du ikke lige sende et svar ???
Avatar billede arne_v Ekspert
25. juli 2006 - 00:45 #4
CAST(tlf AS VARCHAR(8))

bør nok kunne bruges
Avatar billede arne_v Ekspert
25. juli 2006 - 00:45 #5
ORDER BY LENGTH(prefix) DESC

er nok bedre
Avatar billede arne_v Ekspert
25. juli 2006 - 00:45 #6
og et svar
Avatar billede arne_v Ekspert
25. juli 2006 - 00:46 #7
men vent med at acceptere til du ved at det virker
Avatar billede preben.m Nybegynder
25. juli 2006 - 01:33 #8
Hej Arne det ser ud til at typecasting slet ikke er nødvendig. faktisk kan jeg slet ikke få den til at virke hvis jeg benytter den... men den virker helt fint uden.

SELECT * FROM tlf_prefix WHERE '20202020'
LIKE CONCAT(prefix,'%') ORDER BY LENGTH(prefix) DESC

afprøvet på tabel
DROP TABLE IF EXISTS `tlf`.`tlf_prefix`;
CREATE TABLE  `tlf`.`tlf_prefix` (
  `prefix` int(10) unsigned NOT NULL default '0',
  `udbyder` int(10) unsigned NOT NULL default '0',
  `type` enum('Mobil','PSTN','UKENDT') default NULL,
  PRIMARY KEY  (`prefix`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Avatar billede preben.m Nybegynder
28. september 2006 - 23:41 #9
Hvordan skal man gøre hvis man kun vil have bedste match ???
Avatar billede arne_v Ekspert
30. september 2006 - 02:18 #10
Definer bedste match !
Avatar billede preben.m Nybegynder
01. oktober 2006 - 15:41 #11
Bedste match = længste sammenfald af numre fra venste mod højre. f.eks.

telefon nr : 40946040

ud fra den eksempel data.

40    mobil
409    ISDN

Returners
409    ISDN
40    mobil

dette er egentlig meget fint men hvis jeg nu vil joine to tabeler ville jeg meget gerne kunne udlukke 40 mobil. jeg har tænkt på at limit 1 jo på en måde løser det men det kan jeg ikke for til at virke i en join.
Avatar billede preben.m Nybegynder
05. oktober 2006 - 00:49 #12
Hej Arne jeg får en meget fin hjælp af kjulius http://www.eksperten.dk/bruger.phtml?navn=kjulius, jeg vil derfor ikke spilde din tid.

Jeg vil gerne ref. til dette spørgsmål da der er en sammenhæng med ovenstående
http://www.eksperten.dk/spm/735363
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester