热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL排序自动完成的问题

我的网站上有一个自动填充功能,用户可以在他们的学校上课.然后它提供了一个类的下拉列表,这些类具有在字段中的某个位置输入的单词.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语句的顺序.

它可能会使您的查询更大但应该有效.


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 标题: ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
    本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
author-avatar
mobiledu2502904157
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有