Mysql 返回所有用户的帖子ASC,最后7篇除外加入sql

Mysql 返回所有用户的帖子ASC,最后7篇除外加入sql,mysql,sql,Mysql,Sql,我想返回除最后7篇之外的所有用户帖子。MySql 模式如下所示: 如果我离开用户表的连接 我通过最后一个查询检索结果,但它有太多子查询。。。 它是实现我想要的东西所需要的子查询吗?是否有较短的版本?您不需要外部联接,事实上,p.id\u user=4将其转换为内部联接 您应该能够使用限制跳过前7行: SELECT q.*,q.id_post as id FROM ( SELECT FROM posts AS p WHERE p.id_user=4 ORDER BY p.da

我想返回除最后7篇之外的所有用户帖子。MySql

模式如下所示:

如果我离开用户表的连接

我通过最后一个查询检索结果,但它有太多子查询。。。
它是实现我想要的东西所需要的子查询吗?是否有较短的版本?

您不需要外部联接,事实上,p.id\u user=4将其转换为内部联接

您应该能够使用限制跳过前7行:

SELECT q.*,q.id_post as id
FROM
 ( SELECT 
   FROM posts AS p
   WHERE p.id_user=4
   ORDER BY p.date DESC 
   LIMIT 8, 999999999
 ) q
JOIN users u ON u.id_user=q.id_user
WHERE u.id_user=4
ORDER id_post ASC

您当前的查询不需要连接到用户,您不需要访问该表中的任何列,但这可能是一个精简版

请看,这不是一个困难的问题。。。问题基本上是如何返回除最后7篇之外的所有用户帖子。也许我的“尝试”不是解决问题的方法。是的,谢谢,它很有效,但请解释一下这个999999999?@joe:这是一个任意大的数字,比用户可能发布的帖子数量还要多:-
SELECT q.*,q.id_post as id
FROM posts q
LEFT JOIN users u ON u.id_user=q.id_user
WHERE p.id_user=4
AND q.id_post < (SELECT min(rel.id_post) as min_id_post
                    FROM 
                    (
                        SELECT p.*
                        FROM posts p
                        WHERE p.id_user=4
                        ORDER BY p.date  DESC 
                        LIMIT 7
                    ) rel )
SELECT q.*,q.id_post as id
FROM
 ( SELECT 
   FROM posts AS p
   WHERE p.id_user=4
   ORDER BY p.date DESC 
   LIMIT 8, 999999999
 ) q
JOIN users u ON u.id_user=q.id_user
WHERE u.id_user=4
ORDER id_post ASC