2016-04-18 13 views
0

増分カウントループでSQLの順序を使用してデータを選択したいとします。SQL - 増分カウントループで順序を選択する方法

これは例を説明するのは難しいです。 point DESC増加によって「猫ループ

------------------- 
| point | data | cat | 
=================== 
| 9 | a | 5 | 
| 8 | b | 5 | 
| 7 | c | 4 | 
| 6 | d | 1 | 
| 5 | e | 2 | 
| 4 | f | 1 | 
| 3 | g | 3 | 
| 2 | h | 2 | 
| 1 | i | 3 | 

SELECT ~~ ORDER BY data_table ORDER FROM

SELECT *:

は、次の表のデータがあります。

------------------- 
| point | data | cat | 
=================== 
| 6 | d | 1 | -> There are two '1', but this one have bigger point value.(6>4) 
| 5 | e | 2 | -> There are two '2', but this one have bigger point value.(5>2) 
| 3 | g | 3 | 
| 7 | c | 4 | 
| 9 | a | 5 | 
| 4 | f | 1 | 
| 2 | h | 2 | 
| 1 | i | 3 | 
       -> Skip cat '4' because there are no '4' cat value more. 
| 8 | b | 5 | 

私はPHPでSQLを使用しています:

は、結果を期待しています。

これを取得する方法がない場合、私はPHPコードを見つけたり書き込んだりする必要があると思います。

可能な限り簡単にこれを問い合わせるために私に助けを与えてください。

ありがとうございました。

私の場合、idは実際の "id"ではなく、単にINTフィールドです。 "ポイント"に固定

"重複して大きな整数値を持つ"ことを意味します。

+0

だから、あなたが持っているPHPソリューションは何ですか?誰かが自分自身をMySQLのクエリに変換できます。 –

+0

ああ、私はその文章を編集します。それは誤解を招く可能性があります。私はこれのための解決策を見つけることができませんでした。 –

+0

大丈夫です。あなたは後ろに論理が何であるか教えていただけますか?どの '1 'を先に取得しますか?または...あなたは正しく理解していますか? 2つ以上の '1 'があります。 –

答えて

1

ROW_NUMBER関数に値「1000」に変更する必要があるかもしれません。しかし、これはあなたに望ましい結果を与えるはずです。 SQLFiddle

SELECT t.point, t.data, t.cat 
FROM data_table t 
ORDER BY 
    FIND_IN_SET(t.point, (
    SELECT GROUP_CONCAT(point ORDER BY point DESC, cat ASC) 
    FROM data_table t1 
    where t1.cat = t.cat)), 
    cat 

念のため(SQL Serverの):

SELECT * 
FROM data_table t 
ORDER BY ROW_NUMBER() OVER(PARTITION BY t.cat ORDER BY t.id DESC), t.cat 
0

デュード - 私はそれはあなたが あなたはあなただけの猫= 4としての行を削除する必要がありますコード

select * 
from 
(
    select main.* 

       ,@cur_value:=main.cat as cur_value 
       ,@row_num := if (@cur_value = @prev_value, @row_num + 1, 0) as indexer 
       ,@prev_value := @cur_value as prev_value 
       ,if (@row_num > 0, @row_num * 1000 * main.cat, main.cat) as sort_index 
    from 
    (
    select * from aaa order by cat asc , id desc 
    ) main 
    , 
    (SELECT @row_num :=0, @prev_value := 0, @cur_value := 0) inn 
) sort 
order by sort.sort_index 

を確認するためにそれをテストするために、はるかが必要になりますように「AAA」同じテーブルで作業しました唯一、私はまた

行で - あなたはMYSQLに存在しない動的な何か

+0

私は自分のデータに適用しようとしますが動作しません。 (混在して) 私の場合、 'id'は実際の" id "ではありません。これは単なるINTフィールドです。 –

+0

私はあなたのテーブルの例に従ってスクリプトを書いた –

関連する問題