2015-12-02 97 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.... 

它会选择所有类别..

相关问题