2011-09-24 269 views
1

即时通讯工具试图做的是列出所有类别及其帖子,但只限制每个类别的帖子。并排除没有任何帖子的类别。MySQL的子选择限制

我这样做了两个查询,虽然,得到所有类别有帖子,循环的结果,并获得每个类别ID的X数量的帖子。

如何在1个查询中执行此操作?

编辑:这是我完成的,到目前为止..

SELECT p.post_id, c.category_id 
FROM category as c 
JOIN posts AS p ON p.category_id = c.category_id 
WHERE 
FIND_IN_SET(p.post_id, (
    SELECT SUBSTRING_INDEX(a.post_ids, ',', 10) 
    FROM 
    (
     SELECT GROUP_CONCAT(b.post_id) AS post_ids, b.category_id 
     FROM posts as b 
     GROUP BY b.category_id 
    ) AS a 
    WHERE a.category_id = c.category_id 
)) 
+0

使用变量来模拟ROW_NUMBER。 –

+2

给我们一些东西。你的数据库模式是什么?你试过什么了? – netcoder

+0

更新了我的帖子.. – Gene

回答

-2

如何对这样的事情

SELECT `category_name` 
FROM `categories` 
WHERE `posts` !=0 
LIMIT 0 , 30 
+0

-1,'每个类别的帖子数x'需要在内部选择中进行子选择和限制。不是这样的小事。 – Johan

0

要排除所有类别没有任何的信息也类别之间的内部连接,并帖子。如果要限制返回的行数,请使用LIMIT命令。