Avatar billede b_ Nybegynder
09. oktober 2006 - 01:39 Der er 11 kommentarer og
1 løsning

Søgning i databasen

Jeg har leget lidt med at lave en søgefunktion, der søger i min databasen.

Pr. standard søger vha. et tekstfelt, men det er også muligt at lave en udvidet søgning hvor man fx bestemmer prisniveauet.

Her er et uddrag af koden, og det her det giver problemer:

if(isset($_POST['sSearch'])) {
    $search = mysql_real_escape_string($_POST['sSearch']);
    $sql = "SELECT * FROM model";
    $sql .= " INNER JOIN mobil";
    $sql .= " ON model.mobil_id = mobil.mobil_id";
    $sql .= " WHERE model_navn LIKE '%".$search."%' ";
    //$sql .= " OR mobil_producent LIKE '%".$search."%' ";

    if (@$_POST['pris'] == 1) {
    $sql .= " AND pris <= 99 ";
    }

Jeg har udkommenteret OR delen for ellers virker 'pris' ikke medmindre man søge på et ord samtidig. Men uden OR kan man godt vælge en pris uden at skulle indtaste noget i tekstfeltet, så MIT PROBLEM er, at man skal kunne søge på den valgte pris uden at indtaste noget i feltet, og samtidig skal man kunne søge i de to attributter(model_navn og mobil_producent).

Håber I forstår mit spg, og kan hjælpe
Avatar billede b_ Nybegynder
09. oktober 2006 - 21:59 #1
Ingen som har et forslag? Forstår I ikke spg?
Avatar billede b_ Nybegynder
10. oktober 2006 - 14:06 #2
Ingen forslag? Hellere ikke fra Arne ;)
Avatar billede arne_v Ekspert
10. oktober 2006 - 20:08 #3
proev med nogle parenteser
Avatar billede arne_v Ekspert
10. oktober 2006 - 20:09 #4
if(isset($_POST['sSearch'])) {
    $search = mysql_real_escape_string($_POST['sSearch']);
    $sql = "SELECT * FROM model";
    $sql .= " INNER JOIN mobil";
    $sql .= " ON model.mobil_id = mobil.mobil_id";
    $sql .= " WHERE (model_navn LIKE '%".$search."%' ";
    $sql .= " OR mobil_producent LIKE '%".$search."%') ";

    if (@$_POST['pris'] == 1) {
    $sql .= " AND pris <= 99 ";
    }
Avatar billede b_ Nybegynder
10. oktober 2006 - 20:48 #5
Det er k******** løgn, har bare bøvlet med det. Men nu spiller det ;)

Smid et svar

En anden ting, vil gerne have den til at man også skal kunne søge i begge på een gang (mobil_producent og model_navn):
        $sql .= " OR mobil_producent AND model_navn LIKE '%".$search."%') ";

Men overstående virker ikke?
Avatar billede arne_v Ekspert
10. oktober 2006 - 21:00 #6
svar

det sidste forstaar jeg ikke

WHERE (a LIKE '%xxx%' OR b LIKE '%xxx%')

virker og er den korrekte form for et OR test
Avatar billede b_ Nybegynder
10. oktober 2006 - 21:30 #7
Her søger den i model_navn eller mobil_producent:

$sql .= " WHERE (model_navn LIKE '%".$search."%' ";
$sql .= " OR mobil_producent LIKE '%".$search."%') ";

Men ud over det vil jeg gerne have at man kan søge i begge på een gang, altså model_navn kunne være lig med 6600, og mobil_producent = nokia, så vil jeg gerne have at man kan søge på nokia 6600, og den skal så komme frem. Troede dette ville gøre det:

$sql .= " WHERE (model_navn LIKE '%".$search."%' ";
$sql .= " OR mobil_producent LIKE '%".$search."%' ";
$sql .= " OR mobil_producent AND model_navn LIKE '%".$search."%') ";

Men det virker ikke
Avatar billede arne_v Ekspert
10. oktober 2006 - 21:50 #8
$sql .= " WHERE (model_navn LIKE '%".$search1."%' ";
$sql .= " AND mobil_producent LIKE '%".$search2."%') ";

maaske

men saa skal du til at konstruere ogsaa denne del af SQL udfra hvad der er udfyldt
Avatar billede b_ Nybegynder
10. oktober 2006 - 22:03 #9
Tja hmmm.... så skal jeg dele søgelinjen op i to! men vil du ikke mene at dette burde virke:

$sql .= " WHERE (model_navn LIKE '%".$search."%' ";
$sql .= " OR mobil_producent LIKE '%".$search."%' ";
$sql .= " OR mobil_producent AND model_navn LIKE '%".$search."%') ";
Avatar billede arne_v Ekspert
11. oktober 2006 - 01:48 #10
nej
Avatar billede arne_v Ekspert
11. oktober 2006 - 01:49 #11
$sql .= " WHERE (model_navn LIKE '%".$search."%' ";
$sql .= " OR mobil_producent LIKE '%".$search."%' ";
$sql .= " OR CONCAT(mobil_producent,' ',model_navn) LIKE '%".$search."%') ";

er syntaktisk korrekt

men jeg ved ikke om den gør det du ønsker
Avatar billede b_ Nybegynder
11. oktober 2006 - 10:49 #12
Selvfølgelig skal jeg bruge concat. Det havde jeg helt glemt. Tester lige
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