0

我需要从 Post 表中进行选择,每个帖子都与一个类别和标签相关。我需要选择特定的标签/s 和/或类别/s。术语表有自定义字段“menu_order”,用于设置类别顺序。我想按该字段对帖子进行排序。如果我做简单的选择:

SELECT * from wp_posts

LEFT
JOIN wp_term_relationships
ON ( wp_term_relationships.object_id = wp_posts.ID )

LEFT
JOIN wp_terms
ON ( wp_terms.term_id = wp_term_relationships.term_taxonomy_id )

WHERE 1=1
AND wp_posts.post_type = 'post'
AND (
wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private'
)
LIMIT 0, 20

我得到结果:

+----------------+----------------+----------+---------------------+
|    POST ID     |    Term name   |   order  |        type         |
+----------------+----------------+----------+---------------------+
|       2        |      Fire      |    1     |      category       |
+----------------+----------------+----------+---------------------+
|       2        |      blue      |    0     |         tag         |
+----------------+----------------+----------+---------------------+

这只是介绍。

如果我这样做 WHERE $wpdb->terms.term_id = 170 what is a TAG 我只有一个回报。

+----------------+----------------+----------+---------------------+
|    POST ID     |    Term name   |   order  |        type         |
+----------------+----------------+----------+---------------------+
|       2        |      blue      |    0     |         tag         |
+----------------+----------------+----------+---------------------+

我需要选择 POSTS,按类别或/和标签过滤,然后从附加到 POST 的类别中获取 TERM_ORDER。

因此,无论我有什么结果,订单总是从相关类别中提取。

由于我在 MYSQL 方面不那么强,这让我感到困惑。任何输入都会有所帮助:)

更新------------------------------------------------ -

所以,在疯狂编码之后,我设法得到了我想要的东西。不要屏住呼吸,因为这可能既丑陋又缓慢,但很有效。

首先,我创建收集所有产品的视图。

$qqquery = "
CREATE VIEW samsam AS
SELECT 
ID, post_content, post_title, post_excerpt, post_status, post_name, guid, post_type, $wpdb->term_relationships.term_taxonomy_id as cat_term_taxonomy_id, tt1.term_taxonomy_id as tag_term_taxonomy_id

FROM $wpdb->posts

LEFT                
JOIN $wpdb->term_relationships
ON ( $wpdb->term_relationships.object_id = $wpdb->posts.ID )

LEFT 
JOIN $wpdb->term_relationships AS tt1 
ON ( tt1.object_id = $wpdb->posts.ID ) 

WHERE 1=1 
AND $wpdb->posts.post_type = 'post' 
AND (
$wpdb->posts.post_status = 'publish'
OR $wpdb->posts.post_status = 'private'
) 
AND (                       wp_term_relationships.term_taxonomy_id IN ( $query_cat ) // ID's of categories, seperated by coma
AND tt1.term_taxonomy_id IN (' . $add_query_tag_id . ') //ID's of POSTS seperated by coma
) 
ORDER BY $wpdb->term_relationships.term_taxonomy_id DESC
";
$wpdb->query($qqquery);

之后,我会查询我在哪里选择视图并连接关系和术语,以通过过滤掉 order > 0 来获取类别顺序,然后按 id 分组以过滤掉重复项。

$querystr = "
SELECT * from samsam

LEFT 
JOIN $wpdb->term_relationships 
ON (samsam.ID = $wpdb->term_relationships.object_id) 

LEFT
JOIN $wpdb->terms
ON ($wpdb->terms.term_id = $wpdb->term_relationships.term_taxonomy_id) 
AND ($wpdb->terms.menu_order > 0)

WHERE menu_order > 0

GROUP BY ID

ORDER BY menu_order ASC

LIMIT $item_limit_offset, $item_limit_pp"; // first is calculation of products to skip, second is how many posts per page

$pageposts = $wpdb->get_results($querystr, OBJECT);

它能做什么:

类别1(有订单1)post post post

类别 3(有订单 2)post post post

类别 2 (有订单 3) post post post

可以通过标签和/或类别进行限制、偏移、分页、过滤。

我使用了插件“Term Menu Order”,它为订单类别添加了额外的字段。

祝你今天过得愉快。

4

1 回答 1

1

为什么要在这里编写自己的查询?Wordpress 内置了检索数据的功能。

http://codex.wordpress.org/Template_Tags/get_posts http://codex.wordpress.org/Function_Reference/query_posts

于 2011-12-15T12:25:07.227 回答