Avatar billede pfp Nybegynder
05. januar 2004 - 19:16 Der er 9 kommentarer og
1 løsning

Semi-avanceret søgefunktion i mySQL database

Hej.

Jeg har en mySQL database som jeg gerne ville kunne søge i. I min database har jeg følgende opbygning med 2 tabeller:

PAGES
------------------------------
-    PageID (autonr)
-    Title (text)
-    Resume (longtext)
-    Content (longtext)
-    Main (number)
-    ParentID (number)
-    County


COUNTY
------------------------------
-    CountyID (autonr)
-    Name

Tabellerne er bundet sammen på den måde at en side (fra pages) kan tilhøre et County i COUNTY. Dvs. Pages.County kan være lig County.CountyID. Hvis ikke en side hører til et County så er Pages.County = 0.

Desuden er alle sider opdelt i enten hovedsider eller undersider. For hovedsider gælder Pages.Main = 1 og undersider Pages.Main = 2. En undersides linkes til ”sin hovedside” ved at have hovedsidens PageID i feltet ParentID.

Nu har jeg så forsøgt, og atter forsøgt her igennem juledagene at få bygget en fornuftig søgefunktion til dette. Men gang på gang har jeg måtte give op fordi min SQL’er simpelthen er blevet for indviklede.

Det jeg gerne ville ende med var en søgning der præsenterede dataene sådan her:

STANDARDSIDER
---------------------------------
Hovedside
-    underside
-    underside2
Hovedside 2
-    underside 3

COUNTY NR. 1
---------------------------------
Hovedside
-    underside
-    underside2

Jeg fanger mit søgeord med dette:
strKeyword = Request.Form("searchfield")
strKeyword = Replace(strKeyword, "'","''")

Er der en som hart tid/lyst til at hjælpe mig denne funktion?

/pfp
Avatar billede keysersoze Ekspert
05. januar 2004 - 19:24 #1
bortset fra database-forbindelsen og så'n, så burde du langt hen ad vejen kunne få lavet din søgefunktion ved at følge denne tutorial;

http://activedeveloper.dk/aspdigital/kapitel2/search.asp
Avatar billede pfp Nybegynder
05. januar 2004 - 19:28 #2
Hej Keysersoze,

Tak for dit svar.

Jeg fik det nok ikke formuleret ordentligt. Jeg kan godt bygge en alm. søgefunktion der lister alle resultaterne fra en tabel ud i en køre.

Mit problem er at få det hele til at virke sådan at den lister alle standardsider i en sektion for sig (dem hvor county = 0) og alle sider der tilhører et bestemt county i hver deres sektion med County.Name som overskrift for hver sektion...

Mvh pfp
Avatar billede pfp Nybegynder
06. januar 2004 - 16:49 #3
Ingen der kan hjælpe?
Avatar billede keysersoze Ekspert
06. januar 2004 - 16:58 #4
hvis de skal deles op på den måde skal du enten lave;

- noget GROUP BY county - og når du laver dit loop der lister resultaterne skal du tjecke på op county er lige med den forrige county i dit loop. Er den det skal den listes sammen med den forrige. Er den ikke skal der indsættes en ny sektion

- du bliver nødt til at lave flere sql-statements. En for hver post i tabellen county - men det kan blive svært at vedligeholde hvis indholdet i county er dynamisk

- eller du kan lave en SQL der tager alle fra county-tabellen, og det resultat looper du så i gennem. Dette loop danner så hver sektion og i hver sektion laver du en SQL.
Avatar billede pfp Nybegynder
06. januar 2004 - 18:13 #5
Jeg har lavet forskellige SQL's til dem alle sammen nu:
<%
' gemmer søgestrengen i en variabel
strKeyword = Request.Form("searchfield")
strKeyword = Replace(strKeyword, "'","''")

' HERUNDER FANGES PASSENDE RECORDS. DE FANGES I KATEGORIER HVER FOR SIG. DVS. HOVEDSIDER, UNDERSIDER, KOMMUNESIDER, KOMMUNEUNDERSIDER

' STANDARD HOVEDSIDER
SQL_search = "Select * FROM Pages WHERE Main = 1 AND County = 0 AND Search = 1 AND Content LIKE '%" & strKeyword & "%'"
Set rsSearch = Conn.Execute(SQL_search)

SQL_count = "Select Count(pageid) As Antal FROM Pages WHERE Main = 1 AND County = 0 AND Search = 1 AND Content LIKE '%" & strKeyword & "%'"
Set rsCount = Conn.Execute(SQL_count)
antal = rsCount("Antal")

' STANDARD UNDERSIDER
SQL_search2 = "Select * FROM Pages WHERE Main = 2 AND County = 0 AND Search = 1 AND Content LIKE '%" & strKeyword & "%'"
Set rsSearch2 = Conn.Execute(SQL_search2)

SQL_count2 = "Select Count(pageid) As Antal FROM Pages WHERE Main = 2 AND County = 0 AND Search = 1 AND Content LIKE '%" & strKeyword & "%'"
Set rsCount2 = Conn.Execute(SQL_count2)
antal2 = rsCount2("Antal")

' KOMMUNE HOVEDSIDER
SQL_search3 = "Select * FROM Pages WHERE Main = 1 AND County > 0 AND Search = 1 AND Content LIKE '%" & strKeyword & "%'"
Set rsSearch3 = Conn.Execute(SQL_search3)

SQL_count3 = "Select Count(pageid) As Antal FROM Pages WHERE Main = 1 AND County > 0 AND Search = 1 AND Content LIKE '%" & strKeyword & "%'"
Set rsCount3 = Conn.Execute(SQL_count3)
antal3 = rsCount3("Antal")

' KOMMUNE UNDERSIDER
SQL_search4 = "Select * FROM Pages WHERE Main = 2 AND County > 0 AND Search = 1 AND Content LIKE '%" & strKeyword & "%'"
Set rsSearch4 = Conn.Execute(SQL_search4)

SQL_count4 = "Select Count(pageid) As Antal FROM Pages WHERE Main = 2 AND County > 0 AND Search = 1 AND Content LIKE '%" & strKeyword & "%'"
Set rsCount4 = Conn.Execute(SQL_count4)
antal4 = rsCount4("Antal")


samletAntal = antal + antal2 + antal3 + antal4
%>

Så det er mest udtrækket der stadig driller...
Avatar billede keysersoze Ekspert
06. januar 2004 - 20:58 #6
hvordan mener du? hvis du tager hver enkelt sektion og looper igennem er der vel ikke så meget forskel fra det link jeg gav oprindeligt og til nu? ellers må du forklare nærmere
Avatar billede pfp Nybegynder
13. januar 2004 - 19:02 #7
Er der et indlæg der er blevet væk her eller hvad?
Avatar billede pfp Nybegynder
13. januar 2004 - 19:03 #8
Nå men du får point for dit forsøg. Jeg har ikke fået det løst som jeg gerne ville, det vil åbentbart ikke lige lade sig gøre.

Peter
Avatar billede keysersoze Ekspert
13. januar 2004 - 20:52 #9
det ved jeg faktisk ikke - kan slet ikke huske hvad vi har snakket om her. Spørg løs hvis der er noget - der er jo ingen der har sagt at det skal være let ;)
Avatar billede pfp Nybegynder
14. januar 2004 - 13:52 #10
Jeg tror jeg har fundet en acceptabel løsning (anderledes præsentation) til søgeresultatet. Men det kan jo være jeg fortryder på et tidspunkt, så opretter jeg et nyt spørgsmål.

Tak for din hjælp.
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

IT-JOB

Riskpoint A/S (Riskpoint Solutions Limited)

IT Business Analyst

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Teknologirådgiver inden for AI-området til Teknologiafdelingen

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger en IT-supporterelev til lokal IT på Haderslev Kaserne

KMD A/S

Projektleder