限制基于从另一个表中选择值

问题描述:

我有以下表结构:限制基于从另一个表中选择值

类别: ID,名称,限制

帖子: 编号,分类,标题,正文,日期,作者

我想要做的是显示每个类别限制的类别表中的“限制”字段的最新帖子,由帖子的日期排序。

+1

预期产出示例请 – 2011-01-19 17:09:51

+0

@OMG小马:您是否删除了'PHP'标签?我相信,他想要一个PHP/MySQL解决方案。 :) – SuperSaiyan 2011-01-19 17:20:46

+0

@OMG Ponies:预期输出是按日期排序的帖子,受限于每个类别中的“限制”字段。 – Frank 2011-01-19 17:49:19

如果我理解你:

SELECT * FROM posts LEFT JOIN Category ON posts.category = Category.id WHERE limit = 'some limit' ORDER BY category, date DESC

(Asuming:posts.category是一个参考类别表的主键)

尝试是这样的:(犯规测试错误)

$result = mysql_fetch_array(mysql_query("<query to select your category>")); 
$limit = $result['limit']; 
$queryResult = mysql_query("select * from posts order by date desc limit $limit"); 
//do whatever you want with the $queryResult 

在N最大-按组

有趣的变化名
SELECT id, name, limit, postid, title, body, date, author 
FROM 
(
    SELECT 
     c.id, c.name, c.limit, p.id postid, p.title, p.body, p.date, p.author 
     @r:=case when @g=C.id then @r+1 else 1 end r, 
     @g:=C.id 
    FROM 
     (select @g:=null,@r:=0) n 
     CROSS JOIN CATEGORY C 
     INNER JOIN POSTS p on p.category = c.id 
    ORDER BY 
     C.ID, postid 
) X 
WHERE r<=c.limit 
ORDER BY ID, postid 

侧面影响的变量基本上产生2分列

  • @G =组
  • @R =组

这可能是昂贵的,因为没有捷径内行数,它会在JOIN类中的每一行中编号,只有在这之后才会在WHERE r<=c.limit位中减少。