Avatar billede fembe Nybegynder
07. september 2003 - 17:43 Der er 11 kommentarer

Søgning i flere tabeller

Jeg har oprettet 7 forskellige tabeller, og har brug for at lave en søgning i dem alle, er der nogen der kan hjælpe mig med det?

Jeg søger med følgende streng, men ved ikke hvad jeg skal gøre for også at søge i de 6 andre tabeller

SQL = "SELECT * from content WHERE (Headline LIKE '%" & soegeord & "%') OR (Text LIKE '%" & soegeord & "%')OR (Keywords LIKE '%" & soegeord & "%') "

Håber der er nogen der kan hjælpe :o)
Avatar billede erikjacobsen Ekspert
07. september 2003 - 17:46 #1
7 tabeller ???? Du kan overveje at lave strukturen om - hvis det ellers
giver mening - eller lave 7 SELECT sætninger
Avatar billede arne_v Ekspert
07. september 2003 - 17:49 #2
Hvis tabel strukturen er ens kan du lave 7 SELECT's og lave UNION mellem dem.

Men ellers er jeg enig med Erik - formentlig kunne det betale sig at ændre
tabel-strukturen.
Avatar billede arne_v Ekspert
07. september 2003 - 17:50 #3
(SELECT ...) UNION (SELECT ...) UNION ... UNION (SELECT ...)

men husk at SELECT'erne skal returnere samme antal og typer felter.
Avatar billede fembe Nybegynder
08. september 2003 - 16:06 #4
Grunden til at jeg har lavet 7 tabeller er at der er en event tabel, en news tabel, en content o.s.v. og de indeholder alle forskellige felter. Den søgning jeg nu vil lave skal være i alle 7 tabeller så jeg søger efter et ord i alle tabellerne.

Jeg havde prøvet med UNION men fik en fejl da det jo ikke var samme antal og typer felter jeg ville have returneret.

Er det virkelig ikke muligt at søge i flere tabeller der ikke er opbygget ens (det er jo derfor jeg har lavet flere tabeller)?
Avatar billede arne_v Ekspert
08. september 2003 - 17:45 #5
En query kan kun definere et result set og et resultset returnerer
samme antal og type felter i alle rækker.

Du kan enten lade den applikation processe 7 queries (formentlig
det smarteste) eller rette de queries til så de returnerer de
samme felter (man kan godt selecte konstante udtryk).
Avatar billede fembe Nybegynder
08. september 2003 - 20:18 #6
Hmm jeg er desværre ikke helt sikker på jeg forstår hvad du mener, hvis jeg nu lader applikationen processe 7 queries, hvordan gør jeg så det?

Har du et kodeeksempel så jeg kan se det eller er det noget du kan forklare mig?
Avatar billede arne_v Ekspert
08. september 2003 - 20:28 #7
Det er ganske simpelt.

Din applikation:
  - udfører query 1
  - outputter resultatet
  - udfører query 2
  - outputter resultatet nedenunder
...
  - udfører query 7
  - outputter resultatet nedenunder

Uanset om det er en Access form eller en PHP side, så har
applikationen nemlig ikke nogle restriktioner om at der skal
være samme antal og type felter.

Og hvis det laves godt så kan det heller ikke engang ses at
det er forskellige queries der ligger bag.
Avatar billede fembe Nybegynder
09. september 2003 - 22:23 #8
Ok er det sådan du mener jeg skal gøre?

Eksekverer min SQL sætning og udskriver, for derefter at eksekverer SQL sætning nr. 2 og udskrive og så fremdeles?

Hvis det er det du mener så kommer det ikke til at virke da jeg har en test på som udskriver at der ikke blev fundet noget hvis DBrec.eof or soegeord = "" derfor kan jeg få dig til evt at skrive et eksempel på det så jeg kan se hvad det er du mener?
Avatar billede arne_v Ekspert
10. september 2003 - 07:42 #9
Det var det jeg mente.

Men det er vl heller ikke noget uoverkommeligt problem.

I.s.f. at udskrive det hvis en query ikke har nogen
records, så skal du ændre koden til kun at udskrive det
hvis all qurieries ikke har nogen records.
Avatar billede webman Nybegynder
16. september 2003 - 15:40 #10
Du burde nok løse problemet på en mere besværlig, men i længden bedre måde og mere relationel... Omstrukturer din database så du har 1 tabel med indhold og 1 tabel med typer. Så kan du også senere oprette flere typer eller nedlægge dem hvis du skulle få brug for det.
Avatar billede fembe Nybegynder
17. september 2003 - 14:00 #11
Jeg har nu lavet følgende, der er bare et lille problem med det og det er at hvis jeg søger nå noget som ikke findes udskriver den ikke teksten: "Søgningen på "&soegeord&" gav intet resultat" som den jo burde når DBrec er tom. Hvis jeg søger med en tom streng, udskriver den rigtig nok at man skal søge på noget – nogen der kan sige hvad jeg gør galt?

SQL = "SELECT * from content, events, news"
Set DBrec = Conn.Execute(SQL)

if DBrec.eof then
    response.Write "Søgningen på <b>"&soegeord&" </b>gav intet resultat"
elseif soegeord = "" then
    response.Write "For at få et søgeresultat skal du indtaste det ord eller den sætning du ønsker at søge på"
else

    SQL = "SELECT * from content WHERE (Text LIKE '%" & soegeord & "%')"
    Set DBrec = Conn.Execute(SQL)
    do while not DBrec.eof 'and DBrec("online")= "1"
            If DBrec("Text") = "" then
                Response.Write ("<img src=images/bullet.gif> <a href="&DBrec("FileName")&".asp?ID="&DBrec("ID")&">" &(DBrec("headline")) & "</a><p>")
            else
                tekst = Left(DBrec("Text"),130)
                tekst = Replace (tekst,"<br><img src=images/spacer.gif width=1 height=3>","<br>")
                tekst = Replace(tekst,"<b>","")
                Response.Write ("<img src=images/bullet.gif> <a href="&DBrec("FileName")&".asp?ID="&DBrec("ID")&">" &(DBrec("headline")) & "</a><br>"& Left(tekst,78) &"...<p>")
            end if
        DBrec.movenext
    loop
   

    SQL = "SELECT * from events WHERE (Text LIKE '%" & soegeord & "%') or (EventName LIKE '%" & soegeord & "%')"   
    Set DBrec = Conn.Execute(SQL)   
   
    do while not DBrec.eof 'and DBrec("online")= "1"
            If not DBrec("EventName") = "" then
                Response.Write ("<img src=images/bullet.gif> <a href=tilmelding.asp?ID="&DBrec("ID")&">" &(DBrec("EventName")) & "</a><br>"& DBrec("Text")&"...<p>")
            end if
        DBrec.movenext
    loop
   
   
    SQL = "SELECT * from news WHERE (Headline LIKE '%" & soegeord & "%') or (Text LIKE '%" & soegeord & "%')"   
    Set DBrec = Conn.Execute(SQL)   
   
    do while not DBrec.eof 'and DBrec("online")= "1"
            If not DBrec("Headline") = "" then
                Response.Write ("<img src=images/bullet.gif> <a href=nyheder.asp?ID="&DBrec("ID")&">" &(DBrec("Headline")) & "</a><br>"& DBrec("Text")&"...<p>")
            end if
        DBrec.movenext
    loop
end if
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