选择最新的2篇文章,但仅从给定类别中选择

时间:2016-11-12 作者:Andrew Newby

在有人说我应该使用内置的WP函数来实现这一点之前,这是一个Perl脚本,所以我不能;)我只是想抓取最新的文章,这样我就可以在不同的CMS中显示它们。我有以下疑问:

SELECT *
FROM wp_posts
WHERE 1=1 AND post_type = "post" AND post_status = "publish"
ORDER BY ID DESC LIMIT 2
这对于抓取最新发布的2篇帖子很有用,但我也需要根据类别进行筛选(我不希望包含其中的1个类别)。所以我有:

SELECT p.*, t.term_id
FROM wp_posts p
LEFT JOIN wp_term_relationships rel ON rel.object_id = p.ID
LEFT JOIN wp_term_taxonomy tax ON tax.term_taxonomy_id = rel.term_taxonomy_id
LEFT JOIN wp_terms t ON t.term_id = tax.term_id
WHERE 1=1 AND post_type = "post" AND post_status = "publish" AND t.term_id != 56
ORDER BY ID DESC LIMIT 2
这将忽略类别_id56。然而,它有一个不希望出现的效果,即包括看似重复的内容,甚至可能包括草稿:

enter image description here

在视图外,第一行的term\\u id值为3,另一行为9。我对整个术语关系有点陌生,所以我真的太确定这是怎么回事了。

有人能给我指出正确的方向吗?

干杯

安迪

1 个回复
最合适的回答,由SO网友:CodeMascot 整理而成

请尝试以下代码-

SELECT p.*, t.term_id
FROM wp_posts p
LEFT JOIN wp_term_relationships rel ON rel.object_id = p.ID
LEFT JOIN wp_term_taxonomy tax ON tax.term_taxonomy_id = rel.term_taxonomy_id
LEFT JOIN wp_terms t ON t.term_id = tax.term_id
WHERE tax.taxonomy = \'category\' AND post_type = "post" AND post_status = "publish" AND t.term_id != 56
ORDER BY ID DESC LIMIT 2
希望这能解决你的问题。