カテゴリと名前の2つのカラムを持つMySqlテーブルがあります。私はカテゴリの4つのユニークな値を持っており、このテーブルには何千ものレコードがあります。しかし、これらの記録はすべて、表にある4つのカテゴリのいずれかに分類されます。カラム値に基づいたmysqlクエリ結果の取得
今、出力として、各カテゴリの2つの結果、つまり最初のカテゴリの2つの結果、次に2つの次のカテゴリの結果などを取得する必要があります。
単一のクエリで可能ですか?
カテゴリと名前の2つのカラムを持つMySqlテーブルがあります。私はカテゴリの4つのユニークな値を持っており、このテーブルには何千ものレコードがあります。しかし、これらの記録はすべて、表にある4つのカテゴリのいずれかに分類されます。カラム値に基づいたmysqlクエリ結果の取得
今、出力として、各カテゴリの2つの結果、つまり最初のカテゴリの2つの結果、次に2つの次のカテゴリの結果などを取得する必要があります。
単一のクエリで可能ですか?
set @num := 0, @cat := '';
select category,name
@num := if(@cat = category, @num + 1, 1) as row_number,
@cat := category as dummy
from MyTable
group by cateogry, name
having row_number <= 2;
これは私が行っていた場所ですが、group byはグループではないグループの集計を使用しています...これをテストしましたか?あなたはrow_numberカラムを追加しない限り、グループ番号を使って行番号の最初のエントリを取得するだけではありません。さらに、ポスターに私の質問ごとに、完全なファイルを通過することを防ぐためにいくつかの制限が必要です。 – DRapp
これはどうですか?
SELECT * FROM your_table WHERE category = 1 LIMIT 2
UNION
SELECT * FROM your_table WHERE category = 2 LIMIT 2
UNION
SELECT * FROM your_table WHERE category = 3 LIMIT 2
UNION
SELECT * FROM your_table WHERE category = 4 LIMIT 2
あなたのテーブル構造、いくつかのサンプルデータとどのようなあなたが期待を表示することができます。あなたは、SQL変数を使って行うことができる反復プロセスであるため、一般的には標準的なクエリではないグループごとの最大値としてタグ付けされていますが、制限されていないので、数百万のレコードになる可能性があります...ちょうどAT WORST CASE、最後の... 30日程度のエントリを取得してください。 – DRapp