Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
Du må definiere hvad brugeren vil søge efter. Det kan gøres i f ex en dropdown box. Ellers skal du have en masse OR. SELECT * FROM tabel WHERE fornavn LIKE '%søgeterm%' OR efternavn LIKE....osv
Jeg holder på LIKE'en, men man skal lige tage højde for at folk ikke nødvendigvis udfylder alle felter.
Havde det været en opgave i PHP havde den været nem, men i ASP er den altså en smule mere besværlig:
sql = "SELECT * FROM dinTabel"
wherePart = ""
Sub AddToWhere(key) value = "" & Request.Form(key)
If value <> "" Then If wherePart <> "" Then wherePart = wherePart & " OR " wherePart = " " & key & " LIKE '%" & value & "%'" End If End Sub
AddToWhere("firstname") AddToWhere("lastname") AddToWhere("adresse") AddToWhere("postnr") AddToWhere("country") ' AddToWhere("adresse") - er du klar over at du har to felter som hedder "adresse" i din form?
If wherePart <> "" Then sql = " WHERE " & wherePart
Selvf. skal det være like ;o) Tænkte mere på at det skulle være de enkelte felter der skulle i dropdownen. SELECT * FROM tabel WHERE &"dd-value"& LIKE '%søgeterm%'
function AddToWhere($key) { if (isset($_POST[$key]) && trim($_POST[$key]) != "") $wherePartArr[] = "'%" . trim($_POST[$key]) . "%'"; }
$wherePart = implode(" OR "); if ($wherePart != "") $wherePart = " WHERE $wherePart";
AddToWhere("firstname") AddToWhere("lastname") AddToWhere("adresse") AddToWhere("postnr") AddToWhere("country") ' AddToWhere("adresse") - er du klar over at du har to felter som hedder "adresse" i din form?
function AddToWhere($key) { if (isset($_POST[$key]) && trim($_POST[$key]) != "") $wherePartArr[] = $key . " LIKE '%" . trim($_POST[$key]) . "%'"; }
AddToWhere("firstname") AddToWhere("lastname") AddToWhere("adresse") AddToWhere("postnr") AddToWhere("country") ' AddToWhere("adresse") - er du klar over at du har to felter som hedder "adresse" i din form?
$wherePart = implode(" OR ", $wherePartArr); if ($wherePart != "") $wherePart = " WHERE $wherePart";
$sql .= $wherePart; $sql .= " ORDER BY lastname, forstname";
Dog driller det hvis jeg sætter flere AND ind :S If wherePart <> "" Then sql = sql & " WHERE medlemnr <> 0 AND medlemnr <> "" godkendt = 1 AND " & wherePart sql = sql & " ORDER BY efternavn, fornavn"
Kommer til at blive:
SELECT * FROM medlemmer WHERE medlemnr <> 0 AND medlemnr <> " godkendt = 1 AND landekode LIKE '%DK%' ORDER BY efternavn, fornavn
Hjælper heller ikke hvis jeg sætter 2 "" mere ind:
If wherePart <> "" Then sql = sql & " WHERE medlemnr <> 0 AND medlemnr <> """" godkendt = 1 AND " & wherePart sql = sql & " ORDER BY efternavn, fornavn"
If wherePart <> "" Then sql = sql & " WHERE status > 1 and godkendt = 1 and slettet <> 1 AND " & wherePart sql = sql & " ORDER BY medlemnr, fornavn, efternavn" response.write sql Set rs = conn.Execute(sql) DO WHILE NOT rs.EOF
Den henter kun et kriterie ud ?? SELECT * FROM medlemmer WHERE status > 1 and godkendt = 1 and slettet <> 1 AND postnr LIKE '%5000%' ORDER BY medlemnr, fornavn, efternavn
Og jeg søgte på postnr = 5000 og efternavn = Jensen
Min fejl. Jeg har rettet fejlen, som var i AddToWhere() funktionen - prøv selv at finde den.
Desuden har jeg formateret din kode på en ensartet måde. Det gør underværker for læsevenligheden, og gør det dermed nemmere at undgå fejl, samt at vedligeholde koden sidenhen:
Sub AddToWhere(key) value = "" & Request.Form(key)
If value <> "" Then If wherePart <> "" Then wherePart = wherePart & " OR " wherePart = wherePart & " " & key & " LIKE '%" & value & "%'" End If End Sub
If Request.Form("searchperson") <> "" Then sql = "SELECT * FROM medlemmer"
If wherePart <> "" Then sql = sql & " WHERE status > 1 AND godkendt = 1 AND slettet <> 1 AND " & wherePart sql = sql & " ORDER BY medlemnr, fornavn, efternavn" Response.Write sql
Nej det er ikke kun det ... og flytningen er mere af kosmetisk natur. Fejlen var noget helt andet.
Gammel version:
Sub AddToWhere(key) value = "" & Request.Form(key)
If value <> "" Then If wherePart <> "" Then wherePart = wherePart & " OR " wherePart = " " & key & " LIKE '%" & value & "%'" End If End Sub
Rettet version:
Sub AddToWhere(key) value = "" & Request.Form(key)
If value <> "" Then If wherePart <> "" Then wherePart = wherePart & " OR " wherePart = wherePart & " " & key & " LIKE '%" & value & "%'" End If End Sub
Funktionen AddToWhere() lægger et led til wherePart for hvert felt (key) som er udfyldt.
I den fejlflydte version stod der:
wherePart = " " & key & " LIKE '%" & value & "%'"
- hvilket vil sige at wherePart blev overskrevet med det man nu fandt for den aktuelle værid.
I den rettet version:
wherePart = wherePart & " " & key & " LIKE '%" & value & "%'"
- bliver værdien lagt til i enden af wherePart.
Det der gik galt var altså at man aldrig ville få andet end den *sidste* af værdierne. De andre blev simpethen "smidt væk" undervejs.
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.