Avatar billede gigi1 Nybegynder
12. april 2013 - 17:13 Der er 12 kommentarer

Hjælp til søge funktion

Hej

Hvordan laver jeg en Select sætning hvor der kan søges i nedenstående på både fornavn og efternavn (bemærk at man også skal kunne søge på mellemnavn) og det skal være en LIKE sætning så man ikke nødvendigvis behøver at skrive det hele.

Fornavn        Efternavn
Jens Hans      Jensen
Anders        Andersen
Avatar billede arne_v Ekspert
13. april 2013 - 02:22 #1
proev:

SELECT *
FROM dintabel
WHERE fornavn LIKE '%' + ? + '%' OR efternavn LIKE '%' + ? + '%'
Avatar billede gigi1 Nybegynder
13. april 2013 - 11:47 #2
Fik ikke lige skrevet at det er et søgefelt på en side.
Der er kun et søgefelt. Så fornavn og efternavn har ikke hver sin variabel. Det er der problemet ligger.
Avatar billede arne_v Ekspert
13. april 2013 - 18:06 #3
Der er ikke noget i #1 som forbyder dig at bruge samme vaerdi to gange.
Avatar billede gigi1 Nybegynder
14. april 2013 - 11:36 #4
Nej okay, men jeg får ikke det ønskede resultat når jeg søger efter: Jens Jensen
Avatar billede arne_v Ekspert
14. april 2013 - 15:09 #5
proev:

SELECT *
FROM dintabel
WHERE fornavn LIKE '%' + ? + '%' OR efternavn LIKE '%' + ? + '%' OR fornavn + ' ' + efternavn LIKE '%' + ? + '%'
Avatar billede gigi1 Nybegynder
14. april 2013 - 18:38 #6
Den finder Jens Hans Jensen
Når jeg søger på: Jens Hans Jensen

Og når jeg søger på: Jens Hans

Men ikke når jeg søger på: Jens Jensen
Avatar billede arne_v Ekspert
14. april 2013 - 22:51 #7
Saa skal du have splittet soegeordet op i applikationen og udvide where betingelsen.
Avatar billede gigi1 Nybegynder
15. april 2013 - 11:01 #8
Hvordan gør jeg det hvis jeg bruger PHP?
Avatar billede gigi1 Nybegynder
15. april 2013 - 16:06 #9
hvad er der galt her:

Warning: sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given in...


if (isset($_GET['q'])) {

$searchTerms = explode(' ', $_GET['q']);

$searchTermBits = array();
$params = array();

foreach ($searchTerms as $term) {

    $term = trim($term);

    if (!empty($term)) {

        $searchTermBits[] = "Firstname LIKE ? OR Surname LIKE ?";
        $params[] = "%" . $term . "%, %" . $term . "%";
    }

}

$sql = 'SELECT Firstname, Surname FROM Person WHERE ' . implode(' OR ', $searchTermBits);

$options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$stmt = sqlsrv_query( $conn, $sql, $params, $options);

$array = array();

while($fetch = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))
    {
        $array[] = array('Name' => $fetch['Firstname'] . ' ' . $fetch['Surname']);
    }     
echo json_encode($array);
sqlsrv_free_stmt($stmt);

}
Avatar billede arne_v Ekspert
16. april 2013 - 03:07 #10
proev og udskriv $sql og se om der er noget galt med den
Avatar billede gigi1 Nybegynder
17. april 2013 - 14:21 #11
Jeg har fået den til at virke ved at tilføje $params[] to gange.

$params[] = "%" . $term . "%";
$params[] = "%" . $term . "%";

men den giver mig ikke det ønskede resultat.
Avatar billede arne_v Ekspert
18. april 2013 - 02:46 #12
Faar du for mange resultater?

Saa tror jeg at du skal bruge AND i implode (og have parenteser omkring de to OR betingelser).
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