繁体   English   中英

根据从另一个表中选择的值进行限制

[英]Limiting based on value selected from another table

我有以下表格结构:

类别: ID,名称,限制

帖子: id,类别,标题,正文,日期,作者

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

如果我了解您:

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

(假设:posts.category是对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 =组内的行号

这可能很昂贵,因为没有捷径,它会在类别/后联接中的WHERE r<=c.limit行编号,并且只有在此之后,它才会在WHERE r<=c.limit位中被截断。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM