Avatar billede quarkb Nybegynder
21. august 2003 - 15:43 Der er 21 kommentarer og
1 løsning

Søgning på flere felter/tabeler i en database

Er det muligt at lave en søgening på alle felter/tabeler i en Database uden at skulle lave en
WHERE Kategori LIKE '%" & sog & "%' for hver tabel?
Avatar billede hossein Nybegynder
21. august 2003 - 15:50 #1
du kan joine tabellerne også bruge like
Avatar billede quarkb Nybegynder
21. august 2003 - 15:52 #2
Hvordan, jeg kender ikke "join"
Avatar billede hossein Nybegynder
21. august 2003 - 16:00 #3
hvis du har en tabel som hedder f ex minTabel og har felterne ID (datatypen Autonummer) navn (tekst) og har en anden tabel som hedder kunder og har felterne kundeAdresse (tekst), kundeKonto (tal), NavnID (tal)
Hvis Kunder.NavnID er det, det samme som Navn.ID så kan joine de to tabeller sammen:
Select Navn.*, Kunder.* from navn, kunder where navn.ID = kunder.NavnID
Avatar billede quarkb Nybegynder
21. august 2003 - 16:11 #4
Jeg er ikke sikker på at jeg er helt med.

Jeg har disse 2 tabeler som jeg ønsker at "join" index og nyheder.
index har felterne ID, Firmanavn, Adresse, Tekst1, Tekst2
nyheder har felterne ID, Overskrift, Tekst
Avatar billede hossein Nybegynder
21. august 2003 - 16:18 #5
hvert tabel skal ha et felt som indeholder samme tilsvarende værdi i anden tabel. du skal finde for et firmanavn , et tilhørende overskrift
Avatar billede nielle Nybegynder
21. august 2003 - 16:21 #6
Det er ikke en JOIN du skal bruge, men derimod en UNION. Hvorvidt du har adgang til denne, afhænger af hviklen database samt hviklen version af denne du benytter.
Avatar billede nielle Nybegynder
21. august 2003 - 16:23 #7
Hvis det f.eks. er MySQL så er UNION først med fra version 4.0.0.
Avatar billede quarkb Nybegynder
21. august 2003 - 16:23 #8
Jeg bruger en MS Access database, version 2000
Avatar billede hossein Nybegynder
21. august 2003 - 16:26 #9
nielle >> hvorfor ikke join?
Avatar billede nielle Nybegynder
21. august 2003 - 16:26 #10
Jeg kender desværre ikke syntaksen i MS Access v. 2000, men her er noget hjælp fra MySQL, som måske kan bringe dig på den rette vej:

http://www.mysql.com/doc/en/UNION.html
Avatar billede hossein Nybegynder
21. august 2003 - 16:30 #11
du kan bare oprette et nyt felt i nyheder tabellen som hedder Index_id og dets datatype er tal. derefter kopier du Ider fra index og indsætter du i Index_id nu kan du joine de to tabeller.
Union i dette tilfælde er ikke passende.
Avatar billede quarkb Nybegynder
21. august 2003 - 16:36 #12
Ikke for at være besværlig men, kan du ikke lave select stregen så der ikke er noget at tage fejl af. (På forhåpnd tak)
Avatar billede hossein Nybegynder
21. august 2003 - 16:38 #13
vil du søge i alle felter?
Avatar billede nielle Nybegynder
21. august 2003 - 16:39 #14
hossein -> Fordi - hvis jeg altså læser quarkb's spørgsmål korrekt - så er det en attribut som går igen i flere tabeller der skal hentes. Der er derimod intet sagt om at værdien af en attribut i en tabel har nogen reference til værdien i en anden tabel.

Eksempel:

TABEL1 (Kunder): KundeNummer, EMail, Saldo
TABEL2 (Forhandlere): ForhandlerID, Adresse, Telefonnummaer, EMail
TABEL3 (Nyhedsbrev): BrevID, EMail, ModtageJaNej

Hvis man vil udtrække samtlige e-mail adresser fra disse tre tabeller, så kan det gøres som:

(SELECT EMail FROM TABEL1)
UNION
(SELECT EMail FROM TABEL2)
UNION
(SELECT EMail FROM TABEL3)
ORDER BY EMail

Derimod er det komplet umuligt at gøre det via en JOIN.

Men det afhænger som sagt af om jeg har forstået quarkb korrekt.

Mit gæt er at han (?) for søger at gøre noget i stil med:

SELECT EMail FROM
(SELECT EMail FROM TABEL1)
UNION
(SELECT EMail FROM TABEL2)
WHERE LCase(EMail) LIKE '%.dk'

- svarende til at finde samtlige .dk e-mail adresser.
Avatar billede nielle Nybegynder
21. august 2003 - 16:40 #15
quarkb -> Vi kan ikke lave nogen SELECT streng for dig uden at vide hvordan dine tabeller ser ude og hvad det præcist er du vil have ud af din søgning.
Avatar billede quarkb Nybegynder
21. august 2003 - 22:07 #16
Jeg har lavet en søge side som gerne skulle søge efter en ønsket tekst eller ord i begge tabeler (Index & Nyheder).
Index har felterne ID, FirmaNavn, Tekst1, Tekst2 og Tekst3
Nyheder har felterne ID, Overskrift og Tekst.
På hvilken måde søge jeg bedst i begge tabeler og deres felter.

Jeg beklager hvis jeg ikke har forklaret mig tydeligt nok. Jeg håber det er bedere denne gang.
:-)
Avatar billede quarkb Nybegynder
22. august 2003 - 08:21 #17
Et lille tillægs sprøgsmål.
Er det muligt på en nem måde at søge i alle felter i Tabelen uden at skulle skrive alle felterne som nedenstående:
sql = "SELECT * FROM [Index] WHERE Tekst1 LIKE '%" & soeg & "%' OR Tekst2 LIKE '%" & soeg & "%' OR Tekst2 LIKE '%" & soeg & "%' OR FirmaNavn LIKE '%" & soeg & "%'"
Avatar billede nielle Nybegynder
22. august 2003 - 18:38 #18
Som sagt er det UNION du skal have fat på. Derfor skal du lige finde ud af om den overhovedet er understøttet i MS Access 2000. Dernæst skal du finde ud af hvordan syntaksen er.

Princippet er at du først udtrækker et antal rækker data fra databasen og så bringe dem på samme form (ellers kan UNION ikke bruges).

De 4 SQL sætninger ser sådan her ud:

1) SELECT ID, Text1 AS Text FROM Index
2) SELECT ID, Text2 AS Text FROM Index
3) SELECT ID, Text3 AS Text FROM Index
4) SELECT ID, Text FROM Nyheder

Hver af disse SQL resultere i en tabel med to felter kaldet hhv. ID og Text. Disse slås så sammen til en tabel via UNION:

(SELECT ID, Text1 AS Text FROM Index)
UNION
(SELECT ID, Text2 AS Text FROM Index)
UNION
(SELECT ID, Text3 AS Text FROM Index)
UNION
(SELECT ID, Text FROM Nyheder)

Bemærk at hvorvidt dette går godt blandt andet kan afhænge af om dine oprindelige felter Text1, Text2, Text3 og Text er af same type og størrelse.

Du har nu dine data samlet i en stor tabel med to felter kaldet ID og ID. Denne kan du så søge på:

SELECT ID, Text FROM
(SELECT ID, Text1 AS Text FROM Index)
UNION
(SELECT ID, Text2 AS Text FROM Index)
UNION
(SELECT ID, Text3 AS Text FROM Index)
UNION
(SELECT ID, Text FROM Nyheder)
WHERE Text LIKE '%" & soeg & "%'

Bemærk dog at du ikke umiddelbart kan se ud af de fundene ID-værdier om hittet stammer fra Index- eller Nyheder tabellen.
Avatar billede hossein Nybegynder
23. august 2003 - 01:56 #19
Du/han kan godt anvende UNION i access men tabellerne skal have samme strukture. Sql sætningen er det samme som nielle beskriver. Hvis du sætter sætningen i din ASP side så svare tiden forlænges derfor jeg anbefaler at du laver en forspørgsel i selve access (i design) og kalder den f ex minSearch, også kalder du denne forspørgsel fra din asp side. select * fra minSearch where XXX like YYY.
Men hvordan du indsætter noget i din tabeller?
Avatar billede quarkb Nybegynder
25. august 2003 - 15:59 #20
Jeg takker for jeres hjælp, hvis der er nogle som vil havde point, skal i lave det svar, så jeg har mulighed for at give point.
Avatar billede nielle Nybegynder
25. august 2003 - 16:16 #21
Fik du det til at virke?
Avatar billede quarkb Nybegynder
25. august 2003 - 16:26 #22
Delvist, jeg har brugt lidt af dit og ændret lidt på tabelerne. Jo det virker nu som jeg gerne ville. Og mannge tak
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
Kurser inden for grundlæggende programmering

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