作者:mobiledu2502904157 | 来源:互联网 | 2023-09-17 20:18
我的网站上有一个自动填充功能,用户可以在他们的学校上课.然后它提供了一个类的下拉列表,这些类具有在字段中的某个位置输入的单词.Classes表包含字段Class_ID,Term_I
我的网站上有一个自动填充功能,用户可以在他们的学校上课.然后它提供了一个类的下拉列表,这些类具有在字段中的某个位置输入的单词. 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 / courses / sections,例如ECON-101(部门和课程一起).此外,我已经粘贴了一个大大简化的查询,这省略了我目前排序和分组的方式.
但是我的问题涉及如何对结果进行排序.我希望在顶部返回匹配Class_Code的条目,然后是Course_Code,接着是Dept,然后是Course_Title,最后是prof.换句话说,我希望结果按用户在自动完成中提供的特定数量排序.如果他们知道Class_Code,我就更喜欢它在顶部.
我想不出这种不需要大量查询的方法.到目前为止,我能想到的唯一方法就是将每个术语的一堆LIKE比较混叠到每个字段,然后按这些别名进行ORDER.这相当于用户在自动完成中输入的单词数量的5倍.换句话说,一个巨大的丑陋查询.
有一种简单有效的方法可以做到这一点吗?如果有类似INSTR()函数的东西需要多个字符串来搜索,我可以很容易地将自动完成中的所有单词与每个字段进行比较,并且总是对由此产生的5个别名进行排序.
任何欢迎的输入,即使这是一个超出问题范围的一般性建议.但是,事先我要注意的是,我不愿意在这里使用类似FULLTEXT或像Sphinx这样的搜索系统,因为我觉得它不适合像这样的非密集,快速的查询.另外,我不打算重组我的数据库.所以我想用我已有的MySQL查询来做这件事.
提前致谢..
解决方法:
您是否考虑过使用UNION运算符?您可以将不同的查询分成它们自己的SELECT语句,然后使用UNION将它们连接在一起.这将自动将它们保存在您想要的组中 – 这是您运行SELECT语句的顺序.
它可能会使您的查询更大但应该有效.