Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP/MySQL по-добро търсене на потребители

Споменах в коментарите, че Javascript typeahead библиотека може да бъде добър избор за вас. Намерих библиотеката Typeahead на Twitter и двигателя Bloodhound за доста стабилни. За съжаление, документацията е смесена:докато това, от което се нуждаете, е много подобно на техните примери, вие сте златен, но някои подробности (обяснения на токенизаторите, например) липсват.

В един от няколко въпроса относно Typeahead тук в Stack Overflow, @JensAKoch казва:

Честно казано, при кратка проверка документацията на разклонението изглежда малко по-добре, ако не друго. Може да искате да го проверите.

Код от страна на сървъра:

Прилагат се всички предупреждения за използване на стара версия на PHP. Горещо препоръчвам преоборудване за използване на PDO с PHP 5, но този пример използва PHP 4, както е поискано.

Напълно нетестван PHP код. json_encode() би било по-добре, но не се появява до PHP 5. Вашата крайна точка ще бъде нещо като:

headers("Content-Type: application/json");
$results = mysql_query(
   "SELECT ID,StageName,AKA1,AKA2,LegalName,SoundEx FROM performers"
);

$fields = array("ID","StageName","AKA1","AKA2","LegalName","SoundEx");

echo "[";

$first =  true;
while ($row = mysql_fetch_array($results)) {
    ($first) ? $first = false : echo ',';

    echo "\n\t,{";
    foreach($fields as $f) {
        echo "\n\t\t\"{$f}\": \"".$row[$f]."\"";
    }
    echo "\n\t}";
}
echo "]";

Код от страна на клиента:

Този пример използва статичен JSON файл като мъниче за всички резултати. Ако очаквате наборът от резултати да надхвърли 1000 записа, трябва да погледнете remote опция на Bloodhound . Това ще изисква да напишете някакъв персонализиран PHP код, за да обработите заявката, но ще изглежда до голяма степен подобно на крайната точка, която изхвърля всички (или поне най-често срещаните) данни.

var actors = new Bloodhound({
  // Each row is an object, not a single string, so we have to modify the
  // default datum tokenizer. Pass in the list of object fields to be
  // searchable.
  datumTokenizer: Bloodhound.tokenizers.obj.nonword(
    'StageName','AKA1','AKA2','LegalName','SoundEx'
  ),
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  // URL points to a json file that contains an array of actor JSON objects
  // Visit the link to see details 
  prefetch: 'https://gist.githubusercontent.com/tag/81e4450de8eca805f436b72e6d7d1274/raw/792b3376f63f89d86e10e78d387109f0ad7903fd/dummy_actors.json'
});

// passing in `null` for the `options` arguments will result in the default
// options being used
$('#prefetch .typeahead').typeahead(
    {
        highlight: true
    },
   {
        name: 'actors',
        source: actors,
        templates: {
        empty: "<div class=\"empty-message\">No matches found.</div>",
        
        // This is simply a function that accepts an object.
        // You may wish to consider Handlebars instead.
        suggestion: function(obj) {
            return '<div class="actorItem">'
                + '<span class="itemStageName">'+obj.StageName+"</span>"
                + ', <em>legally</em> <span class="itemLegalName">'+obj.LegalName+"</span>"
        }
        //suggestion: Handlebars.compile('<div><strong>{{value}}</strong> – {{year}}</div>')
      },
      display: "LegalName" // name of object key to display when selected
      // Instead of display, you can use the 'displayKey' option too:
      // displayKey: function(actor) {
      //     return actor.LegalName;
      // }
});
/* These class names can me specified in the Typeahead options hash. I use the defaults here. */
    .tt-suggestion {
        border: 1px dotted gray;
        padding: 4px;
        min-width: 100px;
    }
    .tt-cursor {
        background-color: rgb(255,253,189);
    }
    
    /* These classes are used in the suggestion template */
    .itemStageName {
        font-size: 110%;
    }
    .itemLegalName {
        font-size: 110%;
        color: rgb(51,42,206);
    }
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.js"></script>


<p>Type something here. A good search term might be 'C'.</p>
<div id="prefetch">
  <input class="typeahead" type="text" placeholder="Name">
</div>

За улеснение ето същността на кода от страна на клиента .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изчислим ранга от таблицата на mysql

  2. Проблем с блокиране на MySQL InnoDB с две еднакви заявки (различни параметри)

  3. Създайте заявка за вмъкване от масив MySQL и PHP

  4. Не мога да извлека стойността, която исках да избера с помощта на запаметена процедура

  5. Извличане на последния ред с времеви клеймо от таблицата с помощта на INNER JOIN