我想知道是否有一些聪明的方式在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