05. januar 2004 - 19:16Der 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:
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...
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.
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")
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
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 ;)
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.
Synes godt om
Ny brugerNybegynder
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.