我想要返回除最后7个帖子以外的所有用户帖子。 MySQL的。
模式将是这样的:
SELECT *
FROM posts
WHERE id_post < (SELECT * FROM posts min(id_post) WHERE id_user=4
ORDER BY id_post DESC LIMIT 7)
ORDER id_post ASC
如果我使用“用户”表左键加入
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 )
我通过最后一个查询检索结果,但它有很多子查询... 它是否需要达到我想要的子查询?有更短的版本吗?
答案 0 :(得分:0)
您不需要外部加入(实际上WHERE p.id_user=4
无论如何都将其转换为内部加入)。
您应该可以使用LIMIT跳过前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
您当前的查询不需要加入用户,您不能访问该表中的任何列(但这可能是一个精简版本)