За последние 24 часа нас посетили 34970 программистов и 1737 роботов. Сейчас ищут 810 программистов ...

Like запрос

Тема в разделе "PHP для новичков", создана пользователем rs_ssh, 22 дек 2016.

  1. rs_ssh

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

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Скажем есть таблица с полями id, keywords, description и rate.
    Ищем ключевое слово в полях keywords и description при помощи LIKE запроса. Если данное слово находится в keywords то при выводе прибавляем к rate +10, но в базу не записываем, просто выводим ORDER BY rate.

    Ну а если искомое слово есть и в keywords и в description то при выводе прибавляем к rate +20, также в базу не записываем.

    Возможно ли так реализовать?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Фулскан привет.
     
  3. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    возможно.
    --- Добавлено ---
    может быть ты хотел спросить "хорошо ли так делать?". наверное нехорошо.
     
  4. rs_ssh

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

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Аргумент и альтернатива?
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    лайк приведёт к перебору всех записей
    ORDER BY по выражению также работает неоптимально
    но самый сок в том, что лайк найдёт слово там где его нет. пример "%ребенок%" в "козленок, слоненок, жеребенок"

    альтернатива зависит от типичных кейсов. оптимизируют то, что даёт наибольшую отдачу, а не просто на всякий случай.
    классика это нормальная форма для словаря и хранение однажды вычисленного значения rate в отдельном поле.
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    order by rand - вычисляемое. соотв мускул не может выбрать строки по ключу, и вынужден будет вычислить этот ранд для каждой строки в таблице. а потом отсортировать по нему. а потом только отдать тебе первые X записей.

    сгенери случайных чисел в пхп и выбери эти записи.
     
  7. rs_ssh

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

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    А так - '% $search %' ?

    Хотелось бы его менять на лету не записывая в базу, если искомое слово есть и в keywords и в description, то немного rate завышали бы. Это даст преимущество перед теми у кого искомое слово есть только в description.
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а так он не найдёт его в начале строки или в конце
    --- Добавлено ---
    присмотрись к sphinx search, там можно указывать веса для полей по которым будет сортировка.
     
    denis01 нравится это.
  9. rs_ssh

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

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    А так -
    LIKE '% $search %' OR title LIKE '$search %' OR title LIKE '% $search' OR title LIKE '$search' ?

    Какие минимальные требования VPS для sphinx search?
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ну ты еще десяток плохих вариантов добавь через ИЛИ. если хоть один примет неверное решение, условие считаем выполненным.
    блестяще!
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а так он заебётся искать
    --- Добавлено ---
    не, на самом деле можно добавить пробелы ко всем полям в начале и в конце, тогда хватит и одного варианта. =)
     
  12. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    можно использовать функцию find_in_set() она хорошо ищет в списке-через-запятую. но проблемы с производительностью останутся