以下是我的数据库数据,如何用sid和prev_sid用php / mysql对它进行排序??
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
答案 0 :(得分:2)
我建议你重新考虑你的桌面设计。这种类型的数据表示可以方便有效地对行进行排序。
如果你需要保留当前的表设计,我怀疑你需要涉及SQL变量,并且排序选择变得非常混乱并且可能效率不高。
另一个可能更好的解决方案是在应用程序端进行排序,此时可以使用哈希映射在线性时间内轻松完成,将sid值映射到prev_sid和类型值对。 / p>
答案 1 :(得分:0)
看起来您的数据是邻接列表(即sed和prev_sid定义了递归的父子关系)。如果是这种情况,那么为了按顺序获取项目,您可以将其转换为嵌套集合,并按每个节点的左侧值排序以按顺序获取项目。有关分层数据的更多信息,请参阅Managing Hierarchical Data in MySQL。
顺便说一句,如果你想使用PHP将邻接列表转换为嵌套集,请在PHP Moving mySQL Tree Node查看我的答案。
答案 2 :(得分:-1)
如果仔细查看数据,您会发现只需按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
答案 3 :(得分:-2)
218> 559> 199
不使用任何编号系统我曾经使用过它不是。我认为你没有很好地解释你的问题。
查看示例我怀疑您要根据sid的值或perv_sid的值进行排序,具体取决于哪个较小,所以:
至少订购(sid,prev_sid)
下进行。