在 sql 查询中使用 LIMIT 和 ORDER BY 和 LEFT JOIN

Posted

技术标签:

【中文标题】在 sql 查询中使用 LIMIT 和 ORDER BY 和 LEFT JOIN【英文标题】:using LIMIT and ORDER BY with LEFT JOIN in sql query 【发布时间】:2013-01-14 13:22:03 【问题描述】:

我对@9​​87654321@ 有点陌生,我发现很难理解如何使用ORDER BYLIMIT 查询一个表,并且在我的JOINED 上只使用ORDER BY '对'表我认为是?所以基本上,如果我要单独查询这两个表,我会使用这些查询:

SELECT * FROM posts ORDER BY dateSubmitted DESC LIMIT ?,5 

'?'代表我的bind_param(),因为我正在创建分页。现在是我的“正确”第二张桌子:

SELECT * FROM postcomments WHERE postcomments.postID = posts.ID ORDER BY dateSubmitted DESC

据我的理解,将两个表“链接”在一起,我想使用LEFT JOIN,以便从“左”表(作为帖子)接收我的所有数据。

SELECT * FROM posts LEFT JOIN postcomments ON postcomments.postID = posts.ID

现在我可以做到这一点,但我不确定除了我的ORDER BYLIMIT 两个表我会在哪里? 我见过几种不同的方式,我认为这让我感到困惑,就像我见过这样的:

SELECT p.* FROM posts p ORDER BY posts.dateSubmitted DESC LIMIT ?,5 
LEFT JOIN (SELECT * FROM postcomments 
WHERE postscomments.postID = p.ID ORDER BY postcomments.dateSubmitted);

但我真的不确定如何构造我的查询:S 任何帮助表示赞赏:)

【问题讨论】:

你能解释一下在一个场景的帮助下限制“两个”表背后的想法吗? 桌帖只有一个限制。 postcmets 表为ORDERED 但不限于此。因为我想创建一个分页,所以只有帖子表是有限的。比如 0 到 5,然后是 5 到 10 等等。 【参考方案1】:

最后会是这样:

Select * from
(SELECT * FROM posts  ORDER BY dateSubmitted DESC LIMIT ?,5) as tempPost
LEFT JOIN postcomments on (postscomments.postID = tempPost.ID)

【讨论】:

现在我想到了,但这限制了JOINed 表的结果以及左表。 使用多个订单 by posts.dateSubmitted , postcomments.dateSubmitted

以上是关于在 sql 查询中使用 LIMIT 和 ORDER BY 和 LEFT JOIN的主要内容,如果未能解决你的问题,请参考以下文章

SQL(ORACLE):ORDER BY 和 LIMIT [重复]

SQL:使用 UNION、ORDER BY 和 LIMIT 进行选择

在 MySQL 中优化 ORDER BY LIMIT 查询

查询sql limit用法,望大神指教

sql order by,desc和limit使用(mysql)

坑,MySQL中 order by 与 limit 混用,分页有BUG!