[英]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.