繁体   English   中英

如何按两列对MySQL查询进行排序

[英]How to sort MySQL query by two columns

以下是我的数据库数据,如何使用php / mysql通过sid和prev_sid对其进行排序!

sid prev_sid    type
000 197         app_home    
197 198         page_teach  
198 218         page_teach  
199 211         page_step   
211 207         link        
218 559         page_step   
559 199         page_step

结果:

sid prev_sid    type
000 197         app_home
197 198         page_teach
198 218         page_teach
218 559         page_step
559 199         page_step
199 211         page_step
211 207         link

000-> 197-> 198-> 218-> 559-> 199-> 199-> 211-> 207

我建议您重新考虑表格设计。 这种类型的数据表示法阻止对行进行方便且有效的排序。

如果您需要保持当前的表设计,我怀疑您将需要包含SQL变量,并且排序选择会变得非常混乱并且可能效率不高。

另一个可能更好的解决方案是在应用程序端进行排序,这时可以使用哈希映射在线性时间内轻松完成排序,将sid值映射到prev_sid和类型值对。

看来您的数据是一个邻接表(即sed和prev_sid定义了递归的父子关系)。 如果是这种情况,则要按顺序获取项目,可以将其转换为嵌套集,然后按每个节点的左值排序以按顺序获取项目。 有关分层数据的更多信息,请参阅在MySQL中管理分层数据

顺便说一句,如果您想使用PHP将邻接表转换为嵌套集,请在PHP Moving mySQL Tree Node上查看我的答案。

如果仔细查看数据,您将看到只需要按sid进行排序。 这是通过在SQL中将ORDER BY sid附加到查询中来完成的。

SELECT sid, prev_sid, type FROM table ORDER BY sid

如果需要对两列进行排序(此处不是这种情况,但是可能有用), ORDER BY可以将列列表作为参数。

SELECT sid, prev_sid, type FROM table ORDER BY sid, prev_sid

218> 559> 199

没有使用任何我从未使用过的编号系统。 我认为您没有很好地解释您的问题。

查看示例,我怀疑您想基于sid的值还是perv_sid的值进行排序,具体取决于哪一个较小,所以:

最少订购(sid,prev_sid)

C。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM