`
jahu
  • 浏览: 61062 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

(转)mysql高级排序&高级匹配查询示例

 
阅读更多

 在大多数应用场景下,我们使用mysql进行查询时只会用到'=', '>' , '<' , in, like 等常用的方法,看起来,大多数情况下,已经足以应付我们的小型应用了。不过,在一些特殊场景,则需要特殊的查询方式了。

  1. 根据状态来排序的查询

    假设现在一个记录有四种状态,未处理(0)、正在处理(2)、处理成功(1)、处理失败(4),之所以他们的值是这个样子,是因为我们一般情况下是不会用它去排序,所以自然的就想到这样的一些值赋予意义。但是,在排序的时候怎么处理呢? 假如要求的先后顺序是这样的:未处理>处理失败>正在处理>处理成功, 我能想到的就是,假设它们这些状态就是按照要求的排序的值去依次增加的,那就只需要一个order by 该字段即可。具体实现如下:

select * from tab_task b order by (CASE b.deal_status WHEN 0 THEN 10 WHEN 2 THEN 30 WHEN 1 THEN 40 WHEN 4 THEN 20  ELSE 40 END) ASC,b.add_time desc     //按照所需排序值,依次赋值

如果是要根据某个计算的值来排序,如按平均成绩排序,则实现如下:

SELECT * FROM score b GROUP BY uid ORDER BY AVG(b.`score`) DESC;    //直接计算得出排序值,使用RAND()可以得到随机的排序

  2. 比较复杂的模糊查询

    有时,我们需要从某字段中筛选符合条件的值,但是该值又不是一个独立的字段,这时就需要一些高级的模糊查询(正则)。

如,需要查询某个值大于0的记录,实现如下:

SELECT * FROM tab_day_data WHERE retention_days_full REGEXP '.*rd1=([0][1-9]+|[1-9][0-9]*).*';      //查询rd{x}大于0的记录,其中rd可能是许多个类似的不重要的值,被储存至一个字段,同理于其他

mysql正则语法,如下:

复制代码
// .  表示匹配任意一个字符
// | 作为OR操作符,表示匹配其中之一
// [ ] 匹配任何单一字符
// [:a;num:]    任意字母和数字(同 [a-zA-Z0-9]// [:alpha:]     任意字符(同 [a-zA-Z]// [:blank:]     空格和制表(同 [\\t]// [:cntrl:]        ASCII控制字符(ASCII 0到31和127)
// [:digit:]       任意数字(同[0-9]// [:graph:]["print:] 相同,但不包括空格
// [:lower:]      任意小写字线(同 [a-z]// [:print:]        任意可打印字符
// [:punct:]      既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符
// [space:]       包括空格在内的任意空白字符(同 [\\f\\n\\t\\r\\v]// [:upper:]     任意大小字母(同 [A-Z]// [:xdigit:]      任意十六进制数字(同 [a-fA-F0-9]// 元字符  .*?+{m}{m,}{m, n}
复制代码

  语法与正宗的正则不太一致,但大体原理是一致的。

  用mysql做复杂的匹配,虽然可以实现,但是相对来说效率低下,最好还是使用独立字段的形式进行查询,用空间换取时间!

 

3. 检查校验和,验证表是否相等

数据在传输时,可能会发生变化,也有可能因为其它原因损坏,为了保证数据的一致,我们可以计算checksum(校验值)。

使用MyISAM引擎的表会把checksum存储起来,称为live checksum,当数据发生变化时,checksum会相应变化。

CHECKSUM TABLE tbl_name [, tbl_name] ... [QUICK | EXTENDED]

  附:mysql进程查看,卡死现象的解决办法

SHOW FULL PROCESSLIST;       # 查看所有的进程情况,具体解决请百度

SHOW STATUS;              # 查看总体运行概况

KILL 213;          # 将运行慢或卡死的进程删除,注意数据的事务性,否则可能导致数据错误

 

  

  问? 

  mysql 分表之后(比如按年分表,多个相关联表同步拆分),查询应该怎样做才好?

分享到:
评论

相关推荐

    MySql高级Sql查询

    在MySQL数据库系统中,SQL(Structured Query Language)是用于管理和操作数据的核心语言。..."MySql高级.txt"文件应该详细介绍了这些概念,并可能提供了实战示例,帮助读者深入理解和应用这些知识。

    Mysql数据库第三章高级查询上机练习.zip

    在高级查询方面,MySQL提供了丰富的功能,如子查询、联接(JOIN)、聚合函数、窗口函数以及分组和排序等。 1. **子查询**:子查询是在一个查询语句内部嵌套另一个查询语句,用于获取数据或进行条件判断。例如,你...

    mysql根据相关匹配度推荐结果

    总结来说,"mysql根据相关匹配度推荐结果"是一个涉及数据库查询优化、相似度计算以及用户行为分析的综合问题。在实际操作中,我们需要结合业务需求,利用MySQL提供的功能和适当的数据处理方法来构建高效且准确的推荐...

    MySql 按时间段查询数据方法(实例说明)

    本文将详细说明如何使用MySQL进行按时间段查询数据的方法,包括操作示例和说明。 首先,我们必须了解MySQL中处理时间数据的函数。例如,`curdate()` 函数用于获取当前日期,而 `month()` 函数可以提取日期或时间...

    MySQL 高级 笔记

    ### MySQL高级笔记知识点详解 ...以上是关于MySQL高级知识点的详细介绍,涵盖了索引优化、多表查询、查询优化以及其他高级功能,旨在帮助DBA和开发人员更好地理解和掌握MySQL的高级特性,提升数据库性能和系统稳定性。

    mysql入门教程&demo.pdf

    下面是一个简单的 MySQL 语法示例,演示了如何创建一个表、插入数据、查询数据等: ```sql -- 创建数据库 CREATE DATABASE mydb; -- 使用数据库 USE mydb; -- 创建表 CREATE TABLE employees ( id INT AUTO_...

    mysql in 排序

    ### MySQL IN 子句与排序方法详解 在MySQL数据库中,`IN`子句是一种非常实用的功能,主要用于在WHERE子句中指定一个条件值的列表。如果列的值匹配列表中的任何一个值,则会选取该行。然而,在某些情况下,我们不仅...

    MySQL数据的过滤和排序,使用Python语言和MySQL连接库示例代码

    ### MySQL 数据过滤与排序:使用 Python 语言及 MySQL 连接库示例代码 #### 一、概述 本文档旨在介绍如何使用 Python 的 `mysql.connector` 库来连接 MySQL 数据库,并通过 SQL 语句实现数据的过滤和排序功能。在...

    day18--mysql单表&多表1

    了解了这些基本概念后,我们可以进一步探讨更高级的查询技术,如联接(JOIN)、子查询、聚合函数(如`COUNT`、`SUM`、`AVG`、`MAX`、`MIN`)以及分组(GROUP BY)和排序(ORDER BY)。在多表查询中,通过JOIN操作...

    mysql 关键词相关度排序方法详细示例分析

    关键词相关度排序在数据库查询中是一个重要的功能,它能够帮助用户根据关键词的匹配程度对查询结果进行排序,从而提升用户的搜索体验。在MySQL数据库中实现关键词相关度排序可以通过编写特定的SQL查询语句来完成。...

    Mysql查询优化详解(含示例)

    ### MySQL查询优化详解 #### 一、使用EXPLAIN分析查询 **EXPLAIN** 是MySQL中一个非常有用的工具,用于分析SQL语句的执行计划。它能够揭示MySQL如何处理查询,帮助我们理解查询的效率和潜在的性能瓶颈。下面是一些...

    mysql 计算字符串相似度

    本文将详细介绍如何在 MySQL 中创建一个自定义函数 `sfn_GetSimilar_Rate` 来计算两个中文字符串的相似度,并基于此相似度进行排序。 #### 函数设计与实现 本节将详细介绍 `sfn_GetSimilar_Rate` 函数的设计与实现...

    MySQL索引原理及慢查询优化1

    MySQL索引原理及慢查询优化是数据库管理中的重要主题,尤其是在高并发、大数据量的互联网环境中,优化查询性能对于系统的整体效能至关重要。MySQL作为广泛使用的开源关系型数据库,其索引机制和查询优化技巧是开发者...

    MySQL InnoDB 二级索引的排序示例详解

    MySQL InnoDB 存储引擎的二级索引是其特性之一,用于提高数据查询效率。在InnoDB表中,除了主键索引(Primary Key),还可以创建一个或多个辅助索引(Secondary Indexes)。这些索引的叶子节点并不直接存储行数据,...

    MySQL学习笔记2-高级查询与存储.md

    ### MySQL高级查询与存储过程详解 #### 高级查询 在数据库管理中,高级查询能够帮助我们更加灵活地检索和处理数据。以下介绍几种常用的高级查询技术及其应用场景: ##### 子查询 子查询指的是在一个查询语句内部...

    MySQL多表查询和子查询

    ### MySQL多表查询和子查询知识点详解 #### 1. 列出至少有4个员工的部门名称 ...以上示例涵盖了从简单的多表连接到复杂的子查询和聚合函数的应用,有助于深入理解 MySQL 多表查询和子查询的相关技术细节。

    mysql查询语句汇总

    通过上述示例和解释,我们深入了解了MySQL查询语句的核心功能,包括如何选择数据、应用条件过滤、排序结果以及连接多个表。这些基础技能对于任何级别的数据库管理员或开发者都是至关重要的。掌握了这些基本概念后,...

    MySQL海量数据查询优化策略.

    在处理MySQL海量数据查询优化时,我们需要关注的策略包括但不限于以下几点: 1. 优化索引使用:避免全表扫描至关重要。为此,应当在查询条件(WHERE)和排序(ORDER BY)涉及的列上创建索引。索引有助于数据库管理...

    分页,查询,排序,模糊查询(包含数据库文件)

    总的来说,这个资源包提供了一个实战示例,涵盖了数据库操作的基本元素,包括如何使用SQL进行分页查询、模糊查询和排序,以及如何通过JDBC在Java应用中实现这些功能,并与前端进行有效交互。对于初学者或希望深入...

    mysql查询语句汇总.zip

    综上所述,"mysql查询语句汇总.zip"应该涵盖了这些核心概念,文档资料.docx可能提供了详细解释和示例,而项目说明.zip可能包含如何在实际项目中应用这些查询语句的信息。深入学习并熟练掌握这些知识点,对于任何涉及...

Global site tag (gtag.js) - Google Analytics