2017-02-22 64 views
-1

你好,我有一個mysql數據庫,其中有多個類別。我想能夠拉每個類別的前10個項目,例如:MySQL爲每個類別選擇前10個項目

我有下面的表,我想拉的前2行爲name = a,相同的名稱= b和名稱= 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 
------------------------------------ 

這就是我所以農場後過濾器是一個對象的字符串,當進行調用時進來。不幸的是,如果你能指出我正確的方向,那將是非常好的,謝謝你!

代碼:

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); 

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

+0

感謝您的回覆!我試過你的代碼,但我不確定在哪裏可以指定我想要例如名稱a和b? – paul590

+1

給我編輯一個嘗試;沒有測試數據我不能確定它會起作用。 – miken32

+0

再次感謝你的幫助,它幾乎在那裏我能夠得到一些結果,不幸的是它似乎不拉我正在尋找什麼,它似乎是從列表的頂部拉是有沒有辦法讓它從拉底端? – paul590

3

您可以通過下面的查詢獲得團體與元素count一起:

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') 

現在,如果你需要的行只是限制在2每組那麼你需要將此查詢包裝到另一個選擇中並添加標準,例如:

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個名字與後者散佈在桌子上,你會得到2組a's。 – paul590

+1

是的,我們需要爲此添加'order by'。但是,我沒有找到任何列,因此,不包括。另外,MySQL沒有默認的排序順序,因此您需要有一個可以「排序」的列。 –

+0

真棒謝謝你!然而,它拉動信息是爲a和b拉2多組,反正有它只拉2每個? – paul590

相關問題