помогите реализовать быстрый поиск

Тема в разделе "PHP", создана пользователем shmitacc, 14 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. shmitacc

    shmitacc Постоялец

    Регистр.:
    31 авг 2009
    Сообщения:
    76
    Симпатии:
    6
    Как реализовать быстрый поиск по сайту?
    Есть база данных (логин, город, страна, пол, возраст и т.д.)
    Есть формочка для быстрого поиска.
    Есть обработчик на пхп.

    НО! Пользователь, который ищет, может, например, искать только по городу или по городу и возрасту или еще как то. Мне что, нужно делать огромное количество условий для поиска?
    И чем больше параметров для поиска, тем больше условий этих... Должен же быть какой-то алгоритм для этого...
     
  2. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Добавляешь в форму чекбоксы:

    HTML:
    
    <input type="checkbox" name="search[]" value="all"> Везде
    <input type="checkbox" name="search[]" value="age"> По возрасту
    <input type="checkbox" name="search[]" value="city"> По городу
    
    далее делаешь на js обработчик выбора "везде", т.е. при нажатии выделяются все чекбоксы. При запросе в БД используешь дополнительный параметр поиска, полученный в данном результате (результаты фильтра будут содержаться в массиве $_POST['search']).
     
  3. shmitacc

    shmitacc Постоялец

    Регистр.:
    31 авг 2009
    Сообщения:
    76
    Симпатии:
    6
    Да нет, а если нужно искать по городу, по возрасту и по полу. Или по стране и логину. Это сколько чек боксов ставить? и все равно нужно для каждого варианта выбора писать выборку из базы данных.
     
  4. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    А как по-твоему программа должна определять по каким критериям осуществлять поиск если ты ее не научишь? Раздела "магии" или "искусственного интеллекта" тут нет
     
  5. shmitacc

    shmitacc Постоялец

    Регистр.:
    31 авг 2009
    Сообщения:
    76
    Симпатии:
    6
    вопрос решил. просто в самом запросе нужно выполнять проверку
    (...where ".$per=''? что то : что то.")
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Вот эта твоя проверка как раз и ручной обезьяний труд. ПО варианту выше пробегаешься по массиву и создаешь 1 запрос в БД с условиями типа WHERE `city`LIKE %что-то там% OR `age` LIKE %что-то там%. И вообще порекомендовал бы тебе поучить программирование и базы данных заодною
     
  7. moneypool

    moneypool Писатель

    Регистр.:
    11 сен 2009
    Сообщения:
    5
    Симпатии:
    0
    Согласен с saen. Напиши либо функцию либо класс для формирования запросов к базе данных.
    Если интересует могу выложить класс один, правда его наверное прийдется подрехтовать.
     
  8. shmitacc

    shmitacc Постоялец

    Регистр.:
    31 авг 2009
    Сообщения:
    76
    Симпатии:
    6
    Ну я вообще то написал, что создается один запрос, в котором формируются условия. и в конечном итоге получается запрос того типа, что ты написал. Другим методом ты не решишь эту задачу... это единственный способ без формирования кучи запросов. А вот нагромождение кода еще какими-то ненужными чекбоксами и их обработка - вот ручной обезьяний труд...А программирование и базы данных я знаю, так как смог реализовать подобную задачу, не получив внятного ответа от других участников форума...
     
  9. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    И каким же способом интересно? :thenks:
     
  10. shmitacc

    shmitacc Постоялец

    Регистр.:
    31 авг 2009
    Сообщения:
    76
    Симпатии:
    6
    PHP:
    $fnd = ($fcountry != '' ' and country = "'.addslashes($fcountry).'"' '').
           (
    $fcity != '' ' and city = "'.addslashes($fcity).'"' '').
           (
    $ffound != ''  ' and found = "'.addslashes($ffound).'"' '').
           (
    $ffor != ''  ' and forwhat = "'.addslashes($ffor).'"' '');

    $zapros "SELECT * FROM users WHERE 1 ".$fnd;
    если поле "страна" не пустое добавляем проверку из переменной, иначе пропускаем, далее тоже самое делаем с нужными полями...
    и формируем один запрос.... выбираем все из юзеров где истина и нужный нам набор вариантов...
     
Статус темы:
Закрыта.