如何让mysql按照两个或多mysql 按两个字段排序序

在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
如图所示。他的列表按照这样查询出来的
SELECT * FROM content WHERE ORDER BY sort asc,cid DESC;
现在要获取下一条到底怎么办,因为发现普通的 cid&int
根本取不对,因为还要考虑sort的字段
但是sort的字段是很极端的,客户有可能不填的
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
写个存储过程把以上结果插入到一个临时表,用游标循环临时表取每一条记录就行了,我没太明白你的取下一条是什么意思
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我觉得可以利用视图,将
SELECT * FROM content WHERE ORDER BY sort asc,cid DESC;
引入伪列@rownum。
然后每次取得一条记录顺便记下这个伪列。参考:
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
MySQL中根据ID查询指定记录(id为1024)的上一条记录和下一条记录:上一条 SELECT * FROM posts WHERE id & 1024 ORDER BY id DESC LIMIT 1;下一条 SELECT * FROM posts WHERE id & 1024 ORDER BY id LIMIT 1;
或者试试:上一条
select * from content where cid =
(select max(cid) from content where cid & 1024 order by sort asc, cid desc);
select * from content where cid =
(select min(cid) from content where cid & 1024 order by sort asc, cid desc);
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:mysql 如何加入索引 优化 order中的两个字段? - 知乎5被浏览1384分享邀请回答order by preSerial desc, tube_num desc
那么你的索引就应该是(preSerial, tube_num, delete_flag)
14 条评论分享收藏感谢收起0添加评论分享收藏感谢收起写回答mysql两个字段进进行排序 - CSDN博客
mysql两个字段进进行排序
我想先将记录先按照last_time由大到小排序,在last_time值相同的条件下按照id值由大到小排列,以保证晚发布的信息有优先的露面的机会,请问这个sql语句应该如何写?
order & by & last_time & desc & ,id & desc
select & * & from & (select & * & from & tablename & order & by & last_time & desc) & as & t & order & by & t.id & desc
本文已收录于以下专栏:
相关文章推荐
以jibingName=腹痛 字段为例
                 -------------------------------------------------------------...
程序员或多或少都用到过数据库的order by 语句排序查询,但是有几个人知道他的排序规则,当order by 多个字段的时候,排序股则又是怎样的。本人也是突发奇想,想了解一下mysql ...
mysql多条件排序
在数据库查询时,常常需要排序,而有时排序条件可能有多个.
Mysql中根据多个条件排序:(各个条件间使用逗号隔开)
  首先根据class_name字符串长短升序排列,然后根据开始时间降序排列:
SELECT * FROM signup...
mysql切换字段顺序!
1、按照一个字段排序
     ORDER BY 字段名称|位置 ASC|DESC
  默认以升序排列
mysql& -- 以年龄降序形式显示所有员工
mysql& SELECT...
[转]/index.php/database/35-sql/237-mysql-order-by-list
大家都知道, MySQL ...
一、 ORDER BY 排序
要求:按照字段IS_NEW_PROJ的降序、字段LOAN_APR的降序、字段GMT_BUY_START的升序排序
sql语句如下:
b.PROJEC...
业务类简介:
public class ChannelSituation1 implements Serializable {
    private L
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博客分类:
废话不多说了,自己建表的时候,把一个字段类型创建为varchar(2) ,其实应该建为integer(2)的。因为我只允许输出数字。这本来也没什么,无非就是占点空间,懒得改了。
但是今天在后台发现排序有问题。于是,没办法,改之。下面简单说一下MySQL的varchar排序问题,引以为戒。
示例表结构:
先来看一下,我的表结构
show create table cardserver \G*************************** 1. row ***************************
Table: cardserverCreate Table: CREATE TABLE `cardserver` (
`id` int(11) NOT NULL default '0',
`ver` int(11) default NULL,
`createtime` datetime default NULL,
`updatetime` datetime default NULL,
`game_id` int(2) NOT NULL default '0',
`server_id` varchar(2) NOT NULL default '',
`server_name` varchar(40) NOT NULL default '',
PRIMARY KEY
UNIQUE KEY `game_id_server_id` (`game_id`,`server_id`),
UNIQUE KEY `game_id_server_name` (`game_id`,`server_name`)) ENGINE=InnoDB DEFAULT CHARSET=gbk1 row in set (0.00 sec)
因为有外键的存在,所以我不想改变字段类型,费劲啊。呵呵。虽然最后我还是选择了更改字段类型,这是后话。因为我本篇日志想要说明的是varchar排序问题。所以不再说明我是如何更改字段类型的,大家有兴趣可以搜索我以前的日志。(骗一下点击)
现象描述:
下面,我从数据库里面以server_id排一下序,大家来看一下排序后的结果:
select server_id from cardserver where game_id = 1 order by server_id desc limit 10;+-----------+| server_id |+-----------+| 8
| +-----------+
很明显,我想要的结果应该是 10,8,7,6,5 这样的。但是这个10排在了2的后面。按照字符串来排的。其实我是想把它当做数值来排。
手动转换类型:
用下面的方法就可以了,使server_id+0之后再排序,问题解决了。
select server_id from cardserver where game_id = 1 order by server_id+0 desc limit 10;+-----------+| server_id |+-----------+| 10
| +-----------+
使用MySQL函数CAST/CONVERT:
mysql为我们提供了两个类型转换函数:CAST和CONVERT,现成的东西我们怎能放过?
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。这个类型 可以是以下值其中的 一个:BINARY[(N)]CHAR[(N)]DATEDATETIMEDECIMALSIGNED [INTEGER]TIMEUNSIGNED [INTEGER]
所以我们也可以用CAST解决问题:
select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc limit 10;+-----------+| server_id |+-----------+| 10
| +-----------+
也可以使用CONVERT来搞定此问题:
select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED) desc limit 10;+-----------+| server_id |+-----------+| 10
| +-----------+
条条大道通罗马,条条小路通我家。不管是啥方法,解决问题就是好方法。当然,既然MySQL为我们提供了现成的函数。我们为何不让代码显得更漂亮些呢?呵呵。
所以MySql varchar排序我推荐使用CAST或CONVERT函数。
浏览: 33695 次
来自: 北京
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 mysql多字段排序 的文章

 

随机推荐