[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поисковая строка, с Autocomplete
vovan1409
Стояла задача: Создать поисковую строку по типу yandex. Задачу решил довольно стандартно (в коде, только клучивые строки).
<input type="text"" value="" onkeyup="lookup(this.value);" />


function lookup(str) {
if(str.length > 2) {
$.getJSON('rpc.php', {String:str}, function(data){
...
$.each(data.items,function(key,value){
...
});
});
}

Т.е. как только в текстовое поле введено более 2-х букв, скрипт ищит соответствия в БД и выводит результаты в появляющ. под input полем(как в yandex).
Вопрос: стоит ли каждый раз с последующей введенной буквой в посковое поле бергать БД с новым запросом, или как-нибудь сохранять эту выборку и при последующей букве просто ее сокращать? Какие мысли есть, мужики?
Hello
Мало ресурсов на сервере? - не стоит дергать БД
Много ресурсов на сервере? - стоит дергать БД

_____________
VPS от 5$, первые 2 месяца - бесплатно.
Valick
Цитата
как-нибудь сохранять эту выборку

например? есть идеи?
как следить за актуальностью выборки, пополнилась база или нет, нужна уже эта выборка юзеру или передумал?


_____________
Стимулятор ~yoomoney - 41001303250491
vovan1409
Ну например так: строку по которой ведется поиск в БД (str)
function lookup(str) {   
...
}

При первом поиске, сохранять в сессионную переменную, как и сделанную расширенную выборку из БД.
А дальше с каждой новой буквой сравнивать имеющуюся строку в сессионной переменной и вновь полученную строку на вхождение в нее.
if(str.length > 2) {
$.getJSON('rpc.php', {String:str}, function(data){
...
$.each(data.items,function(key,value){
...
});
});

За актуальностью выборки предлагаю следить очень просто, как только поисковая строка теряет фокус ввода, все данные очищаются (fill();)
<input type="text"" id="inputString" value="" onkeyup="lookup(this.value);" onblur="fill();"  />



function fill(){
//очищаем поисковое поле
$('#inputString').val('');
//удаляем слой выдачи результатов поиска
setTimeout("$('.suggestionsBox').remove();", 200);
}

Что думаете по этому поводу?
Valick
т.е. первая значимая буква это выборка из бд, а последующие это поиск средствами РНР? во первых начальные данные отдаются по лимиту как наиболее подходящие (надеюсь), например 20 строк, а вы перелагаете дернуть из базы тысяч 5-10 и запихать это дело в сессию?
лично мне не нравиться эта затея

_____________
Стимулятор ~yoomoney - 41001303250491
vovan1409
Хорошее замечение, как-то не учел!) Ну с учетом лимита, конечно мое предложение не очень подходит
Valick
облегчать "себе жизнь" надо на уровне БД, грамотрые индексы, "вес" строки на основе предыдущих запросов и тд
чтобы искомый результат был достигнут за минимальное количество обращений

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.