2011-11-07 132 views
0

我有一个数据库表是这样的:MySQL的排序和分组

ID  TIME  SUB INFO 
178 9:00AM    A 
179 9:10AM    E 
180 9:15AM  179  B 
181 9:16AM  179  another B 
182 9:20AM  179  C 
183 9:25AM  179  D 
184 9:30AM    F 
185 9:35AM  184  before F 

我需要这个名单正确订单信息(A,B,另一个B,C,d,E,F之前,F)。 当用户插入新的INFO来纠正订单时,使用SUB。例如ID180,用户插入“B”以在ID179之前定位。同样,ID181用户也将“C”插入到179之前。

什么是最有效的mysql查询来做到这一点(显然占非字母信息:P)?

+0

那些是'INFO'值字面意思是 “另一个B” 和 “F之前”? – Phil

+0

这里使用的INFO只是一个例子。表格不能使用信息排序,而是可以按TIME和SUB排序/排序。 – Justin

+0

我最初的查询(这是错误的)是:SELECT * from table WHERE RELATEDTO ='$ pid'ORDER BY SUB ASC,UNIX_TIMESTAMP(TIME)DESC;这虽然不会帮助... – Justin

回答

0
SELECT 
    <column list> 
FROM 
    My_Table 
ORDER BY 
    COALESCE(sub, id + 1), 
    `time` 

这是假设sub列实际上是NULL,而不是简单的空白,当它不具有价值。此外,名为“时间”的列几乎肯定是一个坏主意,因为它不是一个描述性名称,而是一个关键字。尽管它在MySQL中并不是一个保留字,但它可能会引起很多混淆。其他名称不佳的列可能包括“info”和“sub”。

0

SELECT ID,时间,SUB,INFO FROM表1 ORDER BY信息