`
jahu
  • 浏览: 58123 次
  • 性别: 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数据的过滤和排序,使用Python语言和MySQL连接库示例代码

    示例代码中,我们使用了Python的mysql.connector库来连接MySQL数据库并执行SQL语句。 在实际使用时,你需要将your_username和your_password替换为你的MySQL数据库的用户名和密码,将mydatabase替换为你的数据库名称...

    MySQL 5.1参考手册

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制...

    MySQL 5.1参考手册中文版

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3....

    MySQL 5.1官方简体中文参考手册

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制...

    mysql5.1中文手册

    MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施...

    MySQL 5.1参考手册 (中文版)

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制...

    MYSQL中文手册

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3...

    mysql官方中文参考手册

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制...

    MySQL5.1参考手册官方简体中文版

    5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制...

    PHP和MySQL Web开发第4版pdf以及源码

    第12章 MySQL高级管理 12.1 深入理解权限系统 12.1.1 user表 12.1.2 db表和host表 12.1.3 tables_priv表,columns_priv表和procs_priv表 12.1.4 访问控制:MySQL如何使用Grant表 12.1.5 更新权限:修改什么...

    PHP和MySQL WEB开发(第4版)

    第12章 MySQL高级管理 12.1 深入理解权限系统 12.1.1 user表 12.1.2 db表和host表 12.1.3 tables_priv表,columns_priv表和procs_priv表 12.1.4 访问控制:MySQL如何使用Grant表 12.1.5 更新权限:修改什么时候生效 ...

    Mysql如何查询某条记录在分页的第几页详析

    示例中user为表名,5位待匹配的id。很显然,因为是倒序排序只需查找大于此id的记录数即可,如果是正序排列,则小于此id即可。 当查出count值之后,怎么计算当前记录位于第几页呢,这里以java代码

    mysql数据库的基本操作语法

    MySQL中约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息; 约束主要完成对数据的检验,保证数据库数据的完整性;如果有相互依赖数据,保证该数据不被删除。 常用五类约束: ...

    PHP和MySQL Web开发第4版

    第12章 MySQL高级管理 12.1 深入理解权限系统 12.1.1 user表 12.1.2 db表和host表 12.1.3 tables_priv表,columns_priv表和procs_priv表 12.1.4 访问控制:MySQL如何使用Grant表 12.1.5 更新权限:修改什么...

    经典SQL脚本大全

    │ 生成查询的模糊匹配字符串.sql │ 简繁转换.sql │ 统计一个表中某个字符出现最多的字母.sql │ 非法字符串处理.sql │ ├─第04章 │ │ 4.1.5 在各种处理中应用排序规则的示例.sql │ │ 4.2.1 排序规则在拼音...

    Sqlserver2000经典脚本

    5.4.1 查询已用编号分布情况的示例(临时表法).sql │ │ 5.4.1 查询已用编号分布情况的示例(子查询法).sql │ │ 5.4.2 查询缺号分布情况的示例.sql │ │ 5.4.3 返回已用编号、缺号分布字符串的处理...

Global site tag (gtag.js) - Google Analytics