2011-11-27 191 views
1

命令由我有一個MySQL表具有以下字段:MySQL查詢兩個字段

id, morning, evening, event, other-fields 

一週左右,每天的一些事件會無論是在早晨或傍晚進行。因此,事件記錄在表中,其中「早上」或「晚上」字段中存儲的「日期編號」(如果事件發生在早上,則晨間字段包含「日期編號」並且晚上字段包含0 。和反之亦然)。這些條目不是按照用戶自己的意願順序或按日期進行的。

我需要以適當的順序獲取這些記錄,即按升序對日誌進行排序,並且每天的記錄需要按會話方式排序(即早上第一天晚上晚上)。

請幫助一個想法來訂購這兩個領域的數據。

以下是三天一些樣本數據:

id,  mor,  even,  otherstuff.... 
1   1   0 
2   3   0 
3   3   0 
4   2   0 
5   3   0 
6   3   0 
-------------------------- 
7   0   1 
8   0   2 
9   0   3 
10  0   3 
---------------------- 

以下是格式相同的上述數據,我需要把它拿來:

id,  mor,  even,  otherstuff.... 
1   1   0 
2   0   1 
-------------------------- 
3   2   0 
4   0   2 
------------------------ 
5   3   0 
6   3   0 
7   3   0 
8   3   0 
9   0   3 
10  0   3 
+1

請問爲什麼你不使用DateTime字段? – Zoidberg

+0

這是你的一個很好的問題。但我沒有約會的時間。我不知道事件發生的時間,但我知道它是4天或10天等。天數固定,事件數量不固定,日期和時間不固定。這是我知道的晚上和早晨和白天的數字。 –

回答

2

如果他們中的一個是始終爲零,天數將等於mor + even,因此您可以按此排序。

select * 
from your_table 
order by (mor + even), even; 

由於even = 0對「天」的記載,他們將之前在同一天數量的任何「甚至」記載出現。

+0

這對我很好。謝謝。如果我有同樣的情況,但不知何故,我不能總結這兩個領域。如果他們是A,B,C等,而不是數字。 –

+0

如果一個字符串總是空而另一個不是,那麼可以用'coalesce(stringA,stringB)'替換'(mor + even)'。如果一個字符串是空的,另一個不是,我想你可以使用'case when stringA ='',然後stringB else stringA end'。在你的情況下,最好的解決方案可能是一個不同的表格佈局,其中一列是日期編號,另一列是早晨/晚上標誌。 – Martin