Скажем есть таблица с полями id, keywords, description и rate. Ищем ключевое слово в полях keywords и description при помощи LIKE запроса. Если данное слово находится в keywords то при выводе прибавляем к rate +10, но в базу не записываем, просто выводим ORDER BY rate. Ну а если искомое слово есть и в keywords и в description то при выводе прибавляем к rate +20, также в базу не записываем. Возможно ли так реализовать?
лайк приведёт к перебору всех записей ORDER BY по выражению также работает неоптимально но самый сок в том, что лайк найдёт слово там где его нет. пример "%ребенок%" в "козленок, слоненок, жеребенок" альтернатива зависит от типичных кейсов. оптимизируют то, что даёт наибольшую отдачу, а не просто на всякий случай. классика это нормальная форма для словаря и хранение однажды вычисленного значения rate в отдельном поле.
order by rand - вычисляемое. соотв мускул не может выбрать строки по ключу, и вынужден будет вычислить этот ранд для каждой строки в таблице. а потом отсортировать по нему. а потом только отдать тебе первые X записей. сгенери случайных чисел в пхп и выбери эти записи.
А так - '% $search %' ? Хотелось бы его менять на лету не записывая в базу, если искомое слово есть и в keywords и в description, то немного rate завышали бы. Это даст преимущество перед теми у кого искомое слово есть только в description.
а так он не найдёт его в начале строки или в конце --- Добавлено --- присмотрись к sphinx search, там можно указывать веса для полей по которым будет сортировка.
А так - LIKE '% $search %' OR title LIKE '$search %' OR title LIKE '% $search' OR title LIKE '$search' ? Какие минимальные требования VPS для sphinx search?
ну ты еще десяток плохих вариантов добавь через ИЛИ. если хоть один примет неверное решение, условие считаем выполненным. блестяще!
а так он заебётся искать --- Добавлено --- не, на самом деле можно добавить пробелы ко всем полям в начале и в конце, тогда хватит и одного варианта. =)
можно использовать функцию find_in_set() она хорошо ищет в списке-через-запятую. но проблемы с производительностью останутся