我需要对数据库中的帖子进行分页,然后编写下一个查询:
SELECT posts.ID, posts.date, comments.name, comments.value
FROM posts
INNER JOIN comments
ON comments.ID = posts.ID
INNER JOIN relations
ON relations.ID = posts.ID
WHERE type_rel=1 AND status_post=1 AND
LIMIT 0,10
问题在 LIMIT 语句中,我只需要限制“posts”表。
评论表有很多行,如果我将限制设置为“0,10”,则“帖子”表限制为 10 个帖子,但评论表也限制为 10 个。
有人能解决我的问题吗?我在 PHP 查询中使用它。
抱歉我的英语不好,提前致谢。
最佳答案
可以使用子查询限制结果集,然后加入:
SELECT
posts.ID,
posts.date,
comments.name,
comments.value
FROM
(SELECT * FROM posts WHERE status_post = 1 LIMIT 0,10) posts
LEFT JOIN
comments
ON comments.ID = posts.ID
LEFT JOIN
relations
ON relations.ID = posts.ID AND relations.type_rel = 1
从评论来看,你索引文件中的查询是错误的,这是正确的:
SELECT
wp_posts.ID,
wp_posts.post_date,
wp_postmeta.meta_key,
wp_postmeta.meta_value
FROM (SELECT * FROM wp_posts WHERE post_status="publish" AND post_type="post" LIMIT 0,2) wp_posts
LEFT JOIN wp_postmeta
ON wp_postmeta.post_id = wp_posts.ID
LEFT JOIN wp_term_relationships
ON wp_term_relationships.object_id = wp_posts.ID
AND wp_term_relationships.term_taxonomy_id=2
示例结果 here ,如您所见,您有两个帖子,id 1 和 5。
如果你想保留有 term_taxonomy_id = 2
的帖子,使用这个:
SELECT
wp_posts.ID,
wp_posts.post_date,
wp_postmeta.meta_key,
wp_postmeta.meta_value
FROM (
SELECT *
FROM wp_posts
JOIN wp_term_relationships
ON wp_term_relationships.object_id = wp_posts.ID
AND wp_term_relationships.term_taxonomy_id = 2
WHERE post_status="publish" AND post_type="post" LIMIT 0,2) wp_posts
LEFT JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID
Example here ,帖子 ID 为 5 和 7,限制为 0,1 仅返回 5。
关于MySQL Select with Inner Join, Limit only first,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25541730/