За последние 24 часа нас посетили 37276 программистов и 1721 робот. Сейчас ищет 621 программист ...

Поиск по базе

Тема в разделе "MySQL", создана пользователем zevilz, 25 май 2014.

  1. zevilz

    zevilz Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    При поиске создается массив $keywords, куда помещаются обаботанные слова поискового запроса и делается выборка изделий из базы:
    Код (Text):
    1. SELECT * FROM items WHERE
    2. text LIKE '%".implode($keywords, "%' AND status='1' OR text LIKE '%")."%' AND status='1' OR
    3. title LIKE '%".implode($keywords, "%' AND status='1' OR title LIKE '%")."%' AND status='1' OR
    4. head_title LIKE '%".implode($keywords, "%' AND status='1' OR head_title LIKE '%")."%' AND status='1' OR
    5. url_title LIKE '%".implode($keywords, "%' AND status='1' OR url_title LIKE '%")."%' AND status='1' OR
    6. material LIKE '%".implode($keywords, "%' AND status='1' OR material LIKE '%")."%' AND status='1' OR
    7. meta_d LIKE '%".implode($keywords, "%' AND status='1' OR meta_d LIKE '%")."%' AND status='1' OR
    8. meta_k LIKE '%".implode($keywords, "%' AND status='1' OR meta_k LIKE '%")."%' AND status='1'
    Если искать по одному слову, то поиск работает нормально. При поиске по словосочетанию выбираются все записи, где встречается хотя бы одно слово из запроса. А необходимо, чтобы выбирались те записи, где встречаются все слова из запроса.

    Как переделать запрос? Заранее спасибо за ответы.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Воистину настало время освоить sphinx
     
  3. zevilz

    zevilz Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    У меня пока нет своего сервака, а обычный дешевый хостинг. Так что не канает)
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Впс стоит тех же денег. Просто придётся потратить недельку на освоение нового подхода.
     
  5. zevilz

    zevilz Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    Я бы не против, и с лунуксом уже давно знаком. Но цена как я знаю от 6т.р. и выше за год. Я сейчас чуть больше 2т.р./год плачу за хостинг. Пока смысла нет переплачивать, т.к. нагрузки пока почти нет на сайтах)
     
  6. dapperkop

    dapperkop Активный пользователь

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    Есть и дешевле. На рег.ру впс идут от 350 по-моему... А нет, от 150 рублей!) Вот, смотри https://hosting.reg.ru/vps/
     
  7. zevilz

    zevilz Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    Ну это подешевле будет. Позже как-нибудь перейду)
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  9. zevilz

    zevilz Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    А это по интереснее будет)
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    zevilz,
    1. зачем многократное упоминание status=1 ? делай это один раз: (… OR … OR …) AND status='1'
    2. ты не перепутал местами аргументы implode?! и вообще что ты хотел получить на выходе implode?
    3. вообще всегда проверяй какая строка запроса получилась непосредственно перед вызовом query. не надо гадать, надо убедиться.

    Добавлено спустя 5 минут 7 секунд:
    p.s. была здесь тема Как оптимально искать в строке любое слово из другой строки?