У меня есть автозаполнение на моем сайте, где пользователь входит в класс в своей школе.Затем он предоставляет раскрывающийся список Классов, в которых есть слова, которые они вводили где-то в своих полях.В таблице Classes есть поля Class_ID, Term_ID, Department_Code, Course_Code, Class_Code, Course_Title, Instructor, в которых все ищутся по терминам, которые вводит пользователь. Предположим, использование вводит слова «international econ».Затем он будет искать эти два термина в полях следующим образом:
SELECT Class_ID, Department_Code, Course_Code, Class_Code, Course_Title, Instructor FROM Classes AND ((REPLACE(REPLACE(REPLACE(CONCAT(Department_Code, Course_Code, Class_Code), '-', ''), '(', ''), ')', '') LIKE '%international%' OR Instructor LIKE '%international%' OR Course_Title LIKE '%international%') AND (REPLACE(REPLACE(REPLACE(CONCAT(Department_Code, Course_Code, Class_Code), '-', ''), '(', ''), ')', '') LIKE '%econ%' OR Instructor LIKE '%econ%' OR Course_Title LIKE '%econ%')) LIMIT 10
Две быстрые заметки по этому запросу - я делаю REPLACE () и CONCAT (), чтобы пользователи могли вводить depts / курсы / секциикак единое целое, например, ECON-101 (кафедра и курс вместе).Кроме того, я вставил значительно упрощенный запрос, который не учитывает способ сортировки и группировки, который я сейчас выполняю.
Однако мой вопрос касается того, как я могу отсортировать результаты.Я хочу, чтобы записи, соответствующие Class_Code, возвращались вверху, затем Course_Code, затем Dept, затем Course_Title, наконец, prof.Другими словами, я хочу, чтобы результаты сортировались по количеству спецификаций, предоставляемых пользователем при автозаполнении.Если бы они знали Class_Code, я бы поэтому хотел, чтобы он был наверху.
Я не могу придумать способ сделать этот вид, который не требует большого запроса.Пока что я могу думать только о том, чтобы сделать это, сопоставляя несколько сравнений LIKE для каждого термина с каждым полем, а затем ЗАКАЗЫВАЯ по этим псевдонимам.Это эквивалентно пятикратному количеству слов, которые пользователь вводит в автозаполнение. Другими словами, огромный уродливый запрос.
Существует ли простой и эффективный способ выполнить такую сортировку?Если бы существовало что-то вроде функции INSTR (), которая брала для поиска несколько строк, я легко могла бы просто сравнить все слова в автозаполнении с каждым полем и всегда сортировать по 5 псевдонимам, созданным этим.
Любые предложения приветствуются, даже если это общее предложение, выходящее за рамки вопроса.Однако заранее хочу отметить, что я не готов использовать что-то вроде FULLTEXT или поисковую систему, подобную Sphinx, потому что я не чувствую, что она подходит для неинтенсивного, быстрого запроса, подобного этому.Кроме того, я не открыт для реструктуризации моей базы данных.Поэтому я хотел бы сделать это с хорошим запросом MySQL о том, что у меня уже есть.
Заранее спасибо ..