php - 如何加入帖子元和分类表wpdb mysql

标签 php mysql wordpress taxonomy

我正在编写 sql 查询以获取基于分类和发布元的帖子,现在我有这个

<?php
$querystr = "
SELECT * 
FROM $wpdb->posts as m,$wpdb->postmeta
LEFT JOIN $wpdb->term_relationships ON(m.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)  
WHERE m.post_type = 'holiday' 
AND $wpdb->posts.ID = $wpdb->postmeta.post_id 
AND $wpdb->postmeta.meta_key = 'repeatable_fields' 
AND $wpdb->postmeta.meta_value like '%July%' 
AND m.post_status = 'publish'
AND $wpdb->term_taxonomy.taxonomy = 'location'
AND $wpdb->terms.slug = 'berlin' OR $wpdb->terms.slug = 'canada'
ORDER BY m.post_date DESC
 "; ?>

但它显示空结果,即使我有基于上述 critirea 的帖子。每个表单独适用于下面的查询,

SELECT $wpdb->posts.* 
    FROM $wpdb->posts, $wpdb->postmeta
    WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
    AND $wpdb->postmeta.meta_key = 'repeatable_fields' 
    AND $wpdb->postmeta.meta_value like '%July%' 
    AND $wpdb->posts.post_status = 'publish' 
    AND $wpdb->posts.post_type = 'holiday'
    AND $wpdb->posts.post_date < NOW()
    ORDER BY $wpdb->posts.post_date DESC

和分类学

SELECT * 
    FROM $wpdb->posts as m
LEFT JOIN $wpdb->term_relationships ON(m.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)  
WHERE m.post_type = 'holiday' 
AND m.post_status = 'publish'
AND $wpdb->term_taxonomy.taxonomy = 'location'
AND $wpdb->terms.slug = 'berlin' OR $wpdb->terms.slug = 'canada'
ORDER BY m.post_date DESC
 ";

但是如何在单个 sql 查询中加入两者,希望有人能帮助我。

最佳答案

尝试使用 INNER JOIN 并使用附加字段 meta_key 连接 post_meta 表,这样它将只连接相应的行

SELECT * FROM `wp_posts` wp
INNER JOIN `wp_postmeta` wm ON (wm.`post_id` = wp.`ID` AND wm.`meta_key`='repeatable_fields')
INNER JOIN `wp_term_relationships` wtr ON (wp.`ID` = wtr.`object_id`)
INNER JOIN `wp_term_taxonomy` wtt ON (wtr.`term_taxonomy_id` = wtt.`term_taxonomy_id`)
INNER JOIN `wp_terms` wt ON (wt.`term_id` = wtt.`term_id`)
AND wtt.taxonomy = 'location' AND wt.`slug`IN ('berlin','canada')
AND wp.post_status = 'publish' AND wm.meta_value LIKE '%July%' 
ORDER BY wp.post_date DESC

关于php - 如何加入帖子元和分类表wpdb mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17588525/

相关文章:

php - 如何将服务器端信息获取到 JavaScript 中?

php - Codeigniter Htaccess 配置

javascript - 保护客户端->数据库游戏

mysql - 如何从监控串口获取信息到Linino?

wordpress - 如何在 WooCommerce 中获取订单 ID?

php - 使用 Uploadify 发送附加字段数据

php - 尝试获取存储过程结果时出错,但普通查询工作正常

javascript - $routeParams 在 angularjs 中未定义?

php - 如何正确实现字距调整生成的代码

php - 如何使用brew安装的php?