我想知道是否有一些聰明的方式在MySQL中根據特定的標準返回「混合/平衡」數據集?MySQL:是否可以返回「混合」數據集?
爲了說明這一點,假設一個表格中可能有類型1或類型2的結果(即列的每個記錄的值爲1或2)。是否有一個聰明的查詢,從而能夠按順序直接返回1和2之間的結果交替:
月1日的記錄是1型的, 第二個記錄是2型, 第三戰績是1型的, 4記錄類型2, 等...
道歉,如果問題很愚蠢,只是尋找一些選擇。當然,我可以返回任何數據並在PHP中執行此操作,但它確實會添加一些代碼。
謝謝。
我想知道是否有一些聰明的方式在MySQL中根據特定的標準返回「混合/平衡」數據集?MySQL:是否可以返回「混合」數據集?
爲了說明這一點,假設一個表格中可能有類型1或類型2的結果(即列的每個記錄的值爲1或2)。是否有一個聰明的查詢,從而能夠按順序直接返回1和2之間的結果交替:
月1日的記錄是1型的, 第二個記錄是2型, 第三戰績是1型的, 4記錄類型2, 等...
道歉,如果問題很愚蠢,只是尋找一些選擇。當然,我可以返回任何數據並在PHP中執行此操作,但它確實會添加一些代碼。
謝謝。
類似這樣的查詢應該這樣做:
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
排序,你可以在內部改變這種選擇或添加您的條件。
如果有某種類型(1
或2
)的多個值,你休息(1 2 1 2 2 2
)後得到它們。
@Peter Lang:靈感來源,謝謝。會玩這個。 – Tom 2010-04-20 13:28:50
您可以使用IF函數作爲您的SELECT語句的一部分來更改列,但我不確定如何使兩列自動交替。不過,若你找到適當的條件下這會爲你
SELECT IF(condition, first_column, second_column) FROM your_table
first_column
和second_column
工作可以是不同類型的,例如:
SELECT IF(id > 10, name, status_id) FROM clients
效果很好,當name
是一個VARCHAR
和status_id
是INT
@RaYell:謝謝,幾乎在那裏,但不完全。不希望返回不同的列,它並沒有真正解決交替問題,這是問題的主要依據。 – Tom 2010-04-20 11:31:05
所以你有一個表'x'的列,其中包含'1'或'2',並且你想命令你的結果返回交替值爲'x'的行,我知道這是正確的嗎?任何其他排序標準?如果'1'行的數量與'2'行的數量不相同會發生什麼? – 2010-04-20 11:17:22
@ Peter-Lang:是的,沒錯。沒有其他排序標準,但肯定是WHERE子句。如果行數不一樣,理想情況下可以用任何類型填充其餘行,但我知道這是要求太高。 – Tom 2010-04-20 11:29:23