2017-02-22 9 views
-1

こんにちは私は複数のカテゴリを持つmysqlデータベースを持っています。MySQL各カテゴリの上位10項目を選択してください。

私は次の表を持っていますが、最初の2行をname = a、name = bとname =と同じように引き出したいと思います。 c

----------------------------------- 
name | value | description | logo 
----------------------------------- 
a | 2.00 | its a letter| image 
----------------------------------- 
a | 5.00 | its a letter| image 
----------------------------------- 
b | 6.00 | its a letter| image 
----------------------------------- 
c | 3.00 | its a letter| image 
----------------------------------- 
c | 1.00 | its a letter| image 
------------------------------------ 

これは私が持っているファームポストフィルタです。コールが行われたときに来るオブジェクトの文字列です。残念なことに、それは私がすべての最初の10を一緒に提供するだけで、もしあなたが私に正しい方向に向けることができればそれはあなたに感謝します!

コード:

SELECT * 
FROM object_list 
Where object IN (".$_POST['filter'].") 
ORDER BY date DESC, object ASC,id DESC 

答えて

1

は、この仕事をしていますか?

SELECT 
    yourtable.* 
FROM 
    yourtable 
    JOIN (
     SELECT 
      t1.name, 
      t1.value, 
      COUNT(t2.name) AS theCount 
     FROM yourtable t1 
     LEFT JOIN yourtable t2 ON t1.name = t2.name AND t1.value > t2.value 
     WHERE t1.name in ('a', 'b') 
     GROUP BY t1.name, t1.value 
     HAVING theCount < 2 
    ) AS dt USING (name, value); 

出典:あなたはちょうどそのグループごとに2にあなたを行を制限する必要がある場合は、今すぐ

SELECT name, value, 
@count := IF(@value = name, @count + 1, 1) AS count, 
@value := name AS some_value 
FROM test, (SELECT @count := 1, @value := NULL) a 
WHERE test.name in ('a', 'b') 

http://thenoyes.com/littlenoise/?p=36

+0

ご回答いただきありがとうございます。私はあなたのコードを試したが、私はどこで私は例の名前aとbを指定することができます私は不明ですか? – paul590

+1

私の編集を試してください。テストデータなしでは、私はそれが動作することを確認することはできません。 – miken32

+0

あなたの助けをもう一度ありがとう、私はいくつかの結果を得ることができます残念なことに、それは私が探しているものを引っ張っていないようです、それはリストの一番上から引っ張っているようですボトム? – paul590

3

あなたは、以下のクエリによって要素countと一緒にグループを取得することができますこのクエリを別の選択にラップして基準を追加する必要があります。例:

SELECT * 
FROM (
    SELECT name, value, 
    @count := IF(@value = name, @count + 1, 1) AS count, 
    @value := name AS some_value 
    FROM test, (SELECT @count := 1, @value := NULL) a 
    WHERE test.name in ('a', 'b')) a 
WHERE a.count <= 2; 

こちらはSQL Fiddleです。

+0

あなたのコメントをありがとう、私は私の最後にテストし、それはほとんどうまくいく、私は、リストが順序ではなく、あなたは8名の名前を言うことができることを発見した後者は、ああ。 – paul590

+1

はい、それには 'order by'を追加する必要があります。しかし、私は列を見つけられなかったので、含まれていませんでした。また、MySQLのデフォルトの並べ替え順はありませんので、あなたが注文できる列が必要です。 –

+0

ありがとうございます!その情報を引き出すことは、aとbに対して2の複数のグループを引っ張っているのですが、とにかくそれを2つ引くだけですか? – paul590

関連する問題