2017-01-26 5 views
0

Mein Problem ist, dass ich in einer Datenbank nach einem Eintrag suchen möge die beginnend mit dem Anfang und nicht Mitte oder am Ende mit. Ich habe andere StackOverflow-Antworten gesehen, aber diejenigen, die sich mit Jquery's Autocomplete beschäftigen, nehmen ein Array als Quellparameter.JQuery die automatische Vervollständigung verwenden, für den Eintritt zu Beginn des Begriffs Suche mit externer Quelle

Nehmen wir an, ich habe ein Lehrbuch mit der id = Schule:

<input type="text" id="school"> 

In meiner Beispieldatenbank Tabelle habe ich folgende Schulen:

  • Donald Trump Elementary School
  • Barack Obama Mitte Schule
  • Franklin Delano Roosevelt Gymnasium
  • Theodore Roosevelt Technische Akademie
  • John Adams Middle School
  • Andrew Jackson Middle School
  • Andrew Johnson Day Care
  • Bill Clinton Prison Education Program
  • Abraham Lincoln Academy of Fine Arts

Wenn ich nur geben Ein 'A', was zurückgegeben wird, ist im Grunde eine beliebige Zeichenfolge mit einem A darin.

Was ich will zurück sind:

  • Andrew Jackson Middle School
  • Andrew Johnson Day Care
  • Abraham Lincoln Academy of Fine Arts

$('#school').each(function (i, el) { 
    var that = $(el); 
    that.autocomplete({ 
     source: "src/php/extraction.php" 
     , minLength: 2 
     , select: function (event, ui) { 
     info = ui.item.label;      
     $.ajax({ 
       url: 'foobar.php' 
       , type: 'POST', 
       data: { 
        term : info } 
       , success: function (data) { 
        // do stuff } 
       }); 
      } // end of select function 
     }); 
    }); 

In meinem foobar.php, an die die Autocomplete sendet Ich den folgenden Code haben:

if (isset($_GET['term'])) { 
$return_arr = array(); 
try { 
    $stmt = $conn->prepare('SELECT School_Name FROM SOME_TABLE WHERE School_Name LIKE :term'); 
    $stmt->execute(array('term' => '%'.$_GET['term'].'%')); 
    while ($row = $stmt->fetch()) { 
     $return_arr[] = ucwords(strtolower($row['School_Name'])); 
    } 
} catch (PDOException $e) { 
    echo 'ERROR: '.$e->getMessage(); 
} 

/* Toss back results as json encoded array. */ 
echo json_encode($return_arr); 
} 

Antwort

1

Nur eine richtige SQL-Abfrage tun:

$stmt->execute(array('term' => $_GET['term'].'%')); 

Wenn Sie nur die Ergebnisse, beginnend mit 'A' möchten, können Sie nicht LIKE %A% verwenden. Die % wird alles in dieser "Richtung" übereinstimmen.

Also, wenn Sie A% verwenden, wird alles passen, die mit „A“ beginnt. Wenn Sie %A verwenden, wird alles übereinstimmen, was mit "A" endet.

+0

Wow. Haha, vielen Dank – Joseph

+0

Kein Problem, markieren Sie einfach als akzeptiert, um anderen mit dem gleichen Problem zu helfen. –

Verwandte Themen