MySQL IN 条件语句 排序方法
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-05 16:27:09 浏览: 评论:0
有个场景,一个几万条记录的表,主键是 id,我想从表中取 id 为 30,20,80,40 的几条记录.
注意:30,20,80,40,是我预期的顺序,我希望 MySQL 按这样的顺序返回记录.
于是我这样写 SQL,代码如下:
SELECT * FROM my_table WHERE id IN (30, 20, 80, 40);
结果是,他没有按我给的顺序返回,怎么办?查到了 FIELD() 函数,代码如下:
- FIELD(str,str1,str2,str3,…)
- Returns the index (position) of str in the str1, str2, str3, … list. Returns 0 if str is not found.
把 SQL 语句改写为:
SELECT * FROM my_table WHERE id IN (30, 20, 80, 40) ORDER BY FIELD(id, 30, 20, 80, 40);
排序过程是:把选出的记录的 id 在 FIELD 列表中进行查找,并返回位置,以位置作为排序依据.
这样的用法,会导致 Using filesort,是效率很低的排序方式,除非数据变化频率很低,或者有长时间的缓存,否则不建议用这样的方式排序.
把 MySQL 返回的结果,用 PHP 在内存中按 id 顺序重新排列,是个不错的优化方案.
Tags: MySQL IN MySQL条件语句
相关文章
- ·怎样使MySQL安全以对抗解密高手(2013-11-11)
- ·MYSQL用户root密码为弱口令的攻击(2013-11-11)
- ·Mysql数据库的安全配置、实用技巧(2013-11-11)
- ·Mssql和Mysql的安全性分析(2013-11-11)
- ·MySQL安全问题的一点心得(2013-11-11)
- ·PHP常用MySql操作(2013-11-13)
- ·MySQL数据库下载漏洞攻击技术(2013-11-14)
- ·MySQL3.23.31之前版本的安全漏洞(2013-11-14)
- ·通过Mysql的语句生成后门木马的方法(2013-11-14)
- ·MySQL服务器内部安全数据目录访问(2013-11-14)
- ·MySQL数据库中的安全解决方案(2013-11-14)
- ·如何保护MySQL 中的重要数据(2013-11-14)
- ·为你的MySQL数据库加铸23道安全门(2013-11-14)
- ·Mysql的Root密码遗忘的解决办法(2013-11-14)
- ·如何开启MySQL的远程帐号(2013-11-14)
- ·我的Mysql碰到了 1067 错误(2013-11-27)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)