2015-12-02 129 views
1

我有表topics如何在MySQL中爲每個「類別」選擇5條記錄?

ID title body ctg_topic_id ... 
1 aaa bbb 1   ... 
2 aa2 bb2 2   ... 
3 aa3 bb3 1   ... 
4 aa4 bb4 3   ... 
5 aa5 bb5 3   ... 
6 aa6 bb6 1   ... 
....... 
105 a105 b105 23  ... 

我怎樣才能獲得5個記錄每個ctg_topic_id 1選擇?

+0

您想如何爲每個'ctg_topic_id'選擇5條記錄? –

+0

@Tim Biegeleisen感謝您的評論。最新的'創建'專欄。 – whitesiroi

+0

檢查這個帖子:: http://gackoverflow.com/questions/10817103/mysql-and-php-how-to-display-only-the-first-five-rows – Gabrielo

回答

1

該SQL腳本爲MySQL會給你所有的貓的第5位。

SELECT * FROM your_table WHERE ctg_topic_id IN (SELECT DISTINCT ctg_topic_id from your_table) GROUP BY ctg_topc_id LIMIT 0,5 

通過PHP。 (我省略了PHP連接代碼)

首先,獲取列表;

$stm = $pdo->preprare("SELECT DISTINCT cth_topc_id FROM my_table"); 
$stm->execute(): 
$cats = $stm->fetchAll(); 
$result = array(); 
foreach ($cats as $cat) { 
$query = $pdo->prepare("SELECT * my_table WHERE cth_topic_id=? LIMIT 0,5"); 
$query->bindParams(1,$cat); 
$pdo->execute(); 
$result[$i] = $query->fetchAll(); 
} 

這種簡化的代碼應該產生含N陣列(其中,N是不同的貓的數量),其中包含在結果集的5個元素的陣列的矩陣。

我還沒有檢查代碼,所以任何提示將被更正謝謝。

一個問題是LIMIT 0,5將得到前5個項目,而不是任何邏輯。如果您想按(ORDER BY)排序('date')等。

+0

非常感謝您的回答。對不起,我在'Sequel Pro'中獲得「子查詢返回多於一行」 – whitesiroi

+0

嘗試SELECT * FROM your_table WHERE ctg_topic_id IN(SELECT_DISTINCT ctg_topic_id from your_table)GROUP BY ctg_topc_id LIMIT 0,5用IN操作數替換等於 –

+0

對不起,你是對的,改成「IN」確實能使它工作。對不起,尤里,另外,它總共給我5條記錄(限制0,5)。每個ctg_topic_id有可能給我5個記錄嗎?感謝您的幫助。 – whitesiroi

0
SELECT ctg_topic_id from something, GROUP BY ctg_topic_id.... 

它會選擇所有類別..

相關問題