【发布时间】:2021-10-05 06:19:38
【问题描述】:
你好,使用 mysql8 (8.0.23) 的 wordpress:
我想删除除每个类别至少 100 个帖子之外的所有帖子。 所以在前端,我希望点击任何类别以显示至少 100 个帖子。
这似乎很容易,除非许多帖子存在于多个类别中。
所以对于 A 类,如果我删除所有 >100 的帖子,那么第 112 行的帖子可能也存在于 B 类中,但只是第 80 行,因此会被删除。
看到谜底了吗?
所以在测试中使用 4 个类别,我该怎么做
- 删除 A 类帖子 >100
- 但在 B 类中不
- 但在 C 类中不
- 但在 D 类中不
对于下面的示例,类别 A、B、C、D 的 ID (71,72,73,74) 在子查询中使用 LIMIT(必须使用 JOIN,因为子查询中不允许使用 LIMIT?)
SELECT * FROM wp_posts
JOIN
(
SELECT ID
FROM wp_posts
WHERE NOT
(wp_posts.ID IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (72) ) )
LIMIT 100
) d
ON wp_posts.ID
IN (d.ID)
JOIN
(
SELECT ID
FROM wp_posts
WHERE NOT
(wp_posts.ID IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (73) ) )
LIMIT 100
) e
ON wp_posts.ID
IN (e.ID)
JOIN
(
SELECT ID
FROM wp_posts
WHERE NOT
(wp_posts.ID IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (74) ) )
LIMIT 100
) f
ON wp_posts.ID
IN (f.ID)
WHERE
(wp_posts.ID IN ( SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (71) ) )
AND (wp_posts.post_type = 'post' )
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 99999999
OFFSET 100
它有零行
感谢您的帮助!
【问题讨论】:
-
SELECT VERSION();报告什么?回答这个问题的人可能想知道您是否可以使用窗口函数。 -
@BillKarwin 哦,它的 MySQL 8.0.23
-
add a row_number window function and partion it b 100
-
请不要在不可读的评论中发布任何代码。此外,您的 Row_number 只有一个按日期排列的顺序,但它还需要一个
PaRTITION BY,这是您想要数百个的类别
标签: mysql wordpress join subquery limit