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

Posted

技术标签:

【中文标题】基于从另一个表中选择的值进行限制【英文标题】:Limiting based on value selected from another table 【发布时间】:2011-06-11 22:00:15 【问题描述】:

我有以下表格结构:

类别: id、名称、限制

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

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

【问题讨论】:

请提供预期输出示例 @OMG Ponies:你删除了“php”标签吗?我相信,他想要一个 PHP/mysql 解决方案。 :) @OMG Ponies:预期输出是按日期排序的帖子,受每个类别中的“限制”字段限制。 您的努力将帮助我们了解您想要什么以及如何提供它。 【参考方案1】:

N-Greatest-Per-Group 的有趣变化

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 = 组内的行号

这可能会很昂贵,因为没有捷径,它对类别/post JOIN 中的每一行进行编号,只有在此之后它才会在 WHERE r&lt;=c.limit 位中被削减。

【讨论】:

【参考方案2】:

如果我理解你的话:

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

(假设:posts.category 是引用 Category 表的 Primary Key)

【讨论】:

他希望从类别表中检索到“一些限制”。【参考方案3】:

试试这样的:(不测试错误)

$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

【讨论】:

这就是我目前正在做的事情,但是我必须按日期重新对输出进行排序,并对我认为效率低下的每个类别执行多个查询。我希望我能一口气完成。

以上是关于基于从另一个表中选择的值进行限制的主要内容,如果未能解决你的问题,请参考以下文章

SQL INNER JOIN - 根据另一行的值从另一个表中选择数据

MySQL:如何根据从另一个表中选择的值填充现有表的新列[关闭]

基于匹配值的雪花SQL计数和从另一个表求和

根据带有参数的选择(唯一键)从另一个表中插入值

从另一个表更新一个表中的值

从另一个表上的 Where 表中选择计数