2010-04-20 29 views
1

我想知道是否有一些聰明的方式在MySQL中根據特定的標準返回「混合/平衡」數據集?MySQL:是否可以返回「混合」數據集?

爲了說明這一點,假設一個表格中可能有類型1或類型2的結果(即列的每個記錄的值爲1或2)。是否有一個聰明的查詢,從而能夠按順序直接返回1和2之間的結果交替:

月1日的記錄是1型的, 第二個記錄是2型, 第三戰績是1型的, 4記錄類型2, 等...

道歉,如果問題很愚蠢,只是尋找一些選擇。當然,我可以返回任何數據並在PHP中執行此操作,但它確實會添加一些代碼。

謝謝。

+0

所以你有一個表'x'的列,其中包含'1'或'2',並且你想命令你的結果返回交替值爲'x'的行,我知道這是正確的嗎?任何其他排序標準?如果'1'行的數量與'2'行的數量不相同會發生什麼? – 2010-04-20 11:17:22

+0

@ Peter-Lang:是的,沒錯。沒有其他排序標準,但肯定是WHERE子句。如果行數不一樣,理想情況下可以用任何類型填充其餘行,但我知道這是要求太高。 – Tom 2010-04-20 11:29:23

回答

1

類似這樣的查詢應該這樣做:

Select some_value, x, c 
From 
(
    Select 
    some_value, x, 
    Case When x=1 Then @c1 Else @c2 End As c, 
    @c1 := Case When x=1 Then @c1+2 Else @c1 End As c1, 
    @c2 := Case When x=2 Then @c2+2 Else @c2 End As c2 
    From test_data, (Select @c1:=0, @c2:=1) v 
    Order By some_value 
) sub 
Order By c 

它將唯一的偶數分配給x=0,奇數分配給x=1,並將這些值作爲排序標準。


它返回

some_value x c 
A   1 0 
X   2 1 
B   1 2 
Y   2 3 
C   1 4 
Z   2 5 

了以下測試數據:

Create Table test_data (
    some_value VARCHAR(10), 
    x INT 
); 

Insert Into test_data Values('A', 1); 
Insert Into test_data Values('B', 1); 
Insert Into test_data Values('C', 1); 
Insert Into test_data Values('Z', 2); 
Insert Into test_data Values('Y', 2); 
Insert Into test_data Values('X', 2); 

內交替規則值由some_value排序,你可以在內部改變這種選擇或添加您的條件。

如果有某種類型(12)的多個值,你休息(1 2 1 2 2 2)後得到它們。

+0

@Peter Lang:靈感來源,謝謝。會玩這個。 – Tom 2010-04-20 13:28:50

0

您可以使用IF函數作爲您的SELECT語句的一部分來更改列,但我不確定如何使兩列自動交替。不過,若你找到適當的條件下這會爲你

SELECT IF(condition, first_column, second_column) FROM your_table 

first_columnsecond_column工作可以是不同類型的,例如:

SELECT IF(id > 10, name, status_id) FROM clients 

效果很好,當name是一個VARCHARstatus_idINT

+0

@RaYell:謝謝,幾乎在那裏,但不完全。不希望返回不同的列,它並沒有真正解決交替問題,這是問題的主要依據。 – Tom 2010-04-20 11:31:05

相關問題