[Решено] Поиск по юзерам

Тема в разделе "PHP", создана пользователем Sudba, 10 ноя 2017.

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

    Sudba

    Регистр.:
    6 дек 2007
    Сообщения:
    931
    Симпатии:
    50
    Здравствуйте. Есть юзеры, которые заполняют три строки:
    Name1 - Саша
    Lastname - Мишин
    Company - ООО Ромашка
    Есть код, который делает поиск по юзерам
    PHP:
    if($f == 'search' && mb_strlen($y) > 1)
    {
        
    $sq $y;
        
    $title[] = $L['Search']." '".htmlspecialchars($y)."'";
        
    $where['namelike'] = "user_name1 LIKE '%".$db->prep($y)."%'"
    }
    Как мы видим он ищет только по столбцу name1, то есть если вбить Саша, то результат выходит, но если вбить:
    Саша Мишин
    Мишин
    ООО Ромашка
    Саша ООО Ромашка
    Саша Мишин ООО Ромашка

    То результата нет. Как правильно прописать условие, чтобы код работал?
    Пытался вставить or/and ничего не выходит(
     
    Последнее редактирование модератором: 13 ноя 2017
  2. Sudba

    Sudba

    Регистр.:
    6 дек 2007
    Сообщения:
    931
    Симпатии:
    50
    Сделал вот такой запрос, он ищет по имени-фамилии-компании. Но одновременно по имени и фамилии не находит:
    Код:
    $where['namelike'] = "(user_name1 like '%".$db->prep($y)."%'  AND user_Lastname like '%".$db->prep($y)."%' ) or (user_name1 LIKE'%".$db->prep($y)."%') or (user_Lastname LIKE'%".$db->prep($y)."%') or (user_Company LIKE'%".$db->prep($y)."%') or (user_name LIKE'%".$db->prep($y)."%')"; 
     
  3. aurora2000

    aurora2000 Постоялец

    Регистр.:
    24 авг 2014
    Сообщения:
    122
    Симпатии:
    42
    Нужно разбить входные данные для поиска на составляющие explode(" ", $y) и каждое слово из полученного массива искать в нужных полях
     
  4. Sudba

    Sudba

    Регистр.:
    6 дек 2007
    Сообщения:
    931
    Симпатии:
    50
    не подскажите, как правильно прописать в моем случае?
    <-------------- добавлено через 1119 сек. -------------->
    вставил, проверил. Ищет по отдельности Имя и фамилию, а если ввести Имя и Фамилию, то поиск только по имени.
    Другими словами:
    Саша - работает
    Мишин - работает
    Саша Мишин - показывает все у кого имя Саша
     
  5. aurora2000

    aurora2000 Постоялец

    Регистр.:
    24 авг 2014
    Сообщения:
    122
    Симпатии:
    42
    Самый простой вариант для поиска вхождений в каждом из полей по слову

    Код:
    $y = "Саша Мишин ООО Ромашка";
    
    $search_words = explode(" ", $y);
    
    $_where = array();
    
    foreach($search_words as $word)
    {
        $_where[] = "user_name1 LIKE '%".$word."%'"; 
        $_where[] = "user_Lastname LIKE '%".$word."%'"; 
        $_where[] = "user_Company  LIKE '%".$word."%'"; 
    }
    
    $where['namelike'] = implode(" OR ", $_where);
    
    <-------------- добавлено через 1442 сек. -------------->
    расставьте AND где надо и будет работать
     
  6. Sudba

    Sudba

    Регистр.:
    6 дек 2007
    Сообщения:
    931
    Симпатии:
    50
    сделал вот так:
    Код:
    foreach($search_words as $y)
    {
        $_where[] = "user_name1 AND user_Lastname LIKE '%".$y."%'";
        $_where[] = "user_name1 LIKE '%".$y."%'";
        $_where[] = "user_Lastname LIKE '%".$y."%'";
        $_where[] = "user_Company  LIKE '%".$y."%'"; 
    }
    ищет по имени все равно
     
  7. aurora2000

    aurora2000 Постоялец

    Регистр.:
    24 авг 2014
    Сообщения:
    122
    Симпатии:
    42
    Код:
    $y = "Саша Мишин ООО Ромашка";
    
    $search_words = explode(" ", $y);
    
    $_where = array();
    
    foreach($search_words as $word)
    {
        $_where[] = "(user_name1 LIKE '%".$word."%'" . " OR user_Lastname LIKE '%".$word."%'" . " OR user_Company  LIKE '%".$word."%')";
    }
    
    $where['namelike'] = implode(" AND ", $_where);
    
     
    Sudba и latteo нравится это.
Статус темы:
Закрыта.