Avatar billede htx98i17 Professor
11. juli 2017 - 19:35 Der er 3 kommentarer og
1 løsning

SQL søgning

Jeg har et formfelt hvor jeg søger på kunder i databasen.
En kunde kan godt have flere registreringsnumre som tilfældet er her.

Hvis jeg søger på %201423% får jeg 6 resultater. Der burde kun være 5 resultater. (samme kunde vises 2 gange)
Hvis jeg søger på %20142389% for jeg 2 resulater (samme kunde vises 2 gange)




CREATE TABLE IF NOT EXISTS `tblregnummer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `rel_id` int(11) NOT NULL,
  `regnummer` varchar(7) COLLATE utf8_danish_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `rel_id` (`rel_id`),
  KEY `regnummer` (`regnummer`)
) ENGINE=Aria  DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci PAGE_CHECKSUM=1 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `tblregnummer`
--

INSERT INTO `tblregnummer` (`id`, `rel_id`, `regnummer`) VALUES
(1, 1, 'zx42943'),
(2, 1, 'hg87898');


Table structure for table `tblkunder`
--

CREATE TABLE IF NOT EXISTS `tblkunder` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `firma` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
  `cvr` varchar(8) COLLATE utf8_danish_ci DEFAULT NULL,
  `fornavn` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
  `efternavn` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
  `ean` varchar(13) COLLATE utf8_danish_ci DEFAULT NULL,
  `adresse` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
  `adresse2` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
  `postnr` varchar(4) COLLATE utf8_danish_ci DEFAULT NULL,
  `city` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
  `land` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
  `email` varchar(50) COLLATE utf8_danish_ci DEFAULT NULL,
  `telefon` varchar(8) COLLATE utf8_danish_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `telefon` (`telefon`),
  KEY `cvr` (`cvr`),
  KEY `telefon_2` (`telefon`)
) ENGINE=Aria  DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci PAGE_CHECKSUM=1 AUTO_INCREMENT=6 ;

INSERT INTO `tblkunder` (`id`, `firma`, `cvr`, `fornavn`, `efternavn`, `ean`, `adresse`, `adresse2`, `postnr`, `city`, `land`, `email`, `telefon`) VALUES
(1, 'Hansens hest', '', 'Hans', 'hansen', '', 'Skolevej 38', '', '8900', 'Randers', '', '', '20142389'),
(2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '20142381'),
(3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '20142380'),
(4, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '20142383'),
(5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '20142392');



[div]
SELECT
    tk.id,tk.firma,tk.cvr,tk.fornavn,tk.efternavn,tk.ean,tk.adresse,tk.adresse2,tk.postnr,tk.city,tk.land,tk.email,tk.telefon
   
FROM tblkunder tk

LEFT JOIN tblregnummer tr ON
    tr.rel_id = tk.id

WHERE
    tk.telefon LIKE ? || tk.firma LIKE ? || tk.cvr LIKE ? || tk.fornavn LIKE ? || tk.efternavn LIKE ? || tk.ean LIKE ? || tk.adresse LIKE ? || tk.email LIKE ? || tr.regnummer LIKE ?

GROUP BY
    tk.id,
    tr.regnummer
   
Avatar billede arne_v Ekspert
11. juli 2017 - 19:58 #1
Hvis der er flere tr per tk saa bliver tk raekken vist flere gange. Saadan virker JOIN.
Avatar billede htx98i17 Professor
11. juli 2017 - 20:08 #2
Kan man ikke begrænse resultatet med en anden JOIN, DISTINCT eller GROUP BY?
Jeg har leget med det, men... ak
Avatar billede htx98i17 Professor
11. juli 2017 - 20:21 #3
Det ser ud til at nedenstående giver de resulatet jeg gerne vil have...


SELECT
    tk.id,tk.firma,tk.cvr,tk.fornavn,tk.efternavn,tk.ean,tk.adresse,tk.adresse2,tk.postnr,tk.city,tk.land,tk.email,tk.telefon

FROM tblkunder tk

LEFT JOIN tblregnummer tr ON
    tr.rel_id = tk.id AND tr.regnummer LIKE ?

WHERE
    tk.telefon LIKE ? || tk.firma LIKE ? || tk.cvr LIKE ? || tk.fornavn LIKE ? || tk.efternavn LIKE ? || tk.ean LIKE ? || tk.adresse LIKE ? || tk.email LIKE ?
    || tr.regnummer LIKE ? 

GROUP BY
    tk.id,
    tr.regnummer

Avatar billede arne_v Ekspert
12. juli 2017 - 04:26 #4
Hvis den begraenser tr til max. 1 per tk, saa loeser den problemet.
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



IT-JOB