2014-01-06 48 views
-3

我想排序出现在我的页面的列值,起初它会寻找活动,然后等待,然后出售,然后即将到来。但它显示的其他情况。这里是我的代码MySQL Field()排序

SELECT 
    * 
FROM custom 
ORDER BY 
    FIELD(status,'Active','Pending','Sold','Upcoming') DESC 
+1

向我们展示一个示例数据集和您想要的输出。 – Kermit

+0

其显示在第一时间出售然后活跃然后待定然后即将到来 –

+1

好的,不要给我们示例数据集。 – Kermit

回答

2

由于这些状态都是以字母,你应该能够做到

SELECT * FROM custom ORDER BY status ASC 
+0

它不起作用 –

+0

@AmirHossain你可以尝试放置一个http://sqlfiddle.com/来显示不按预期工作。这里有一些缺失的数据,这不能解决问题。 – amaster

+4

@AmirHossain *什么是不工作?也许如果你向我们展示了你想要的东西,我们可以做得更好*帮助你。 – Kermit

6

虽然这是事实,ORDER BY Status应该工作,在理论上,因为目前您想要的顺序发生是按字母顺序排列的,并且暂时忽略不清楚“它没有工作”是什么意思,更可扩展的方法是使用CASE表达式。

ORDER BY CASE Status 
    WHEN 'Active' THEN 0 
    WHEN 'Pending' THEN 1 
    WHEN 'Sold'  THEN 2 
    WHEN 'Upcoming' THEN 3 
END DESC; 

更具前景的解决方案将是一个ID,名称和序列的状态表。您在查询中加入该表,然后按顺序排序。然后,如果您稍后决定以不同顺序请求数据,则可以更改序列,并且稍后可以轻松地添加更多状态类型,而无需触及查询。另外它可以让你存储id而不是字符串,让你在相同的空间存储更多的数据。

+3

RESPEK!很好的工作在MySQL问题 – swasheck

+3

黄金[标签:MySQL]徽章在任何时间! – Kermit