1

特定の基準に従って「混合/バランスのとれた」データセットを返すための賢い方法がMySQLにあるかどうか疑問に思っていますか?

説明のために、タイプ1またはタイプ2のテーブルに潜在的な結果があるとしましょう(つまり、列の各レコードの値は1または2です)。1と2を順番に交互に返す結果を直接返すことができる巧妙なクエリはありますか?

1番目のレコードはタイプ1、2番目のレコードはタイプ2、3番目のレコードはタイプ1、4番目のレコードはタイプ2などです。

質問がばかげている場合は、いくつかのオプションを探しているだけでお詫びします。もちろん、任意のデータを返し、PHPでこれを行うことはできますが、コードが追加されます。

ありがとう。

4

2 に答える 2

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ますが、内部選択でこれを変更するか、そこに条件を追加することができます。

1特定のタイプ(または)の値がさらにある場合は2、残りの値(1 2 1 2 2 2)の後にそれらを取得します。

于 2010-04-20T11:56:19.590 に答える
0

SELECTステートメントの一部としてIF関数を使用して列を変更できますが、2つの列を自動的に切り替える方法がわかりません。しかし、あなたが適切な状態を見つけた場合、これはあなたのために働くでしょう

SELECT IF(condition, first_column, second_column) FROM your_table

first_columnsecond_column異なるタイプにすることができます。例:

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

nameがaVARCHARstatus_idある場合にうまく機能しますINT

于 2010-04-20T11:00:17.187 に答える