24. juli 2006 - 21:54Der 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
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 ???
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;
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.
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.