Php 显示特定自定义帖子类型的所有帖子及其帖子元

Php 显示特定自定义帖子类型的所有帖子及其帖子元,php,mysql,wordpress,Php,Mysql,Wordpress,有人能帮我显示特定自定义帖子类型的所有帖子和邮戳吗 我在wordpress项目中创建了一个自定义帖子类型“Course”,带有一些自定义元框 我需要显示该自定义帖子类型的所有帖子和自定义元框值 我试过下面的问题 $query = " SELECT $wpdb->posts.ID,$wpdb->posts.post_title,$wpdb->postmeta.meta_key FROM $wpdb->posts LEFT JOIN $wpdb->postmeta

有人能帮我显示特定自定义帖子类型的所有帖子和邮戳吗

我在wordpress项目中创建了一个自定义帖子类型“Course”,带有一些自定义元框

我需要显示该自定义帖子类型的所有帖子和自定义元框值

我试过下面的问题

$query = "
SELECT   $wpdb->posts.ID,$wpdb->posts.post_title,$wpdb->postmeta.meta_key
FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta ON ( $wpdb->posts.ID = $wpdb->postmeta.post_id)
WHERE               
$wpdb->postmeta.meta_key IN ('_course_code','_instructor_name')
AND    
$wpdb->posts.post_type = 'course'   
";

$results = $wpdb->get_results($query);       
echo "<pre>"; 
print_r($results);
但我希望结果也一样

$posts = $wpdb->posts;
$postmeta = $wpdb->postmeta;
$query = "SELECT $posts.ID, $posts.post_title, $postmeta.meta_key
FROM $posts
LEFT JOIN $postmeta ON ( $posts.ID = $postmeta.post_id)
WHERE         
$postmeta.meta_key IN ('_course_code','_instructor_name')
AND  $posts.post_type = 'course'   
GROUP BY $posts.ID";

$results = $wpdb->get_results($query);       
echo "<pre>"; 
print_r($results);      
echo "</pre>"; 

首先,不要做$wpdb->post,因为很难阅读。其次,sql查询部分缺少分组

$query = "
            SELECT $wpdb->posts.ID,$wpdb->posts.post_title,
            PM1.meta_value as _course_code,
            PM2.meta_value as _instructor_name
            FROM $wpdb->posts
            LEFT JOIN $wpdb->postmeta AS PM1 ON ( $wpdb->posts.ID = PM1.post_id AND PM1.meta_key = '_course_code')
            LEFT JOIN $wpdb->postmeta AS PM2 ON ( $wpdb->posts.ID = PM2.post_id AND PM2.meta_key = '_instructor_name')
            WHERE $wpdb->posts.post_type = 'course'
            AND $wpdb->posts.post_status = 'publish'
            AND ((PM1.meta_key = '_course_code') AND (PM2.meta_key='_instructor_name')) 
            GROUP BY $wpdb->posts.ID
            ORDER BY $wpdb->posts.post_date DESC

         ";

$results = $wpdb->get_results($query);

echo "<pre>"; print_r($results); die("here");

我自己设法得到了结果,把我的答案放在这里,希望它能帮助别人


考虑在没有任何聚合函数的情况下,提供与您期望的结果相对应的适当DDL,一个GROUPBY子句可能是一个错误。另外,需要注意的是,这呈现为一个内部join,我已经使用了groupby,但是它只提供了post meta中的一个meta_键“\u course_code”,其他的都丢失了。如果您需要查看唯一的值,如meta_键,请通过逗号分隔向group添加额外内容:group by$posts.ID、$postmeta.meta_键
$posts = $wpdb->posts;
$postmeta = $wpdb->postmeta;
$query = "SELECT $posts.ID, $posts.post_title, $postmeta.meta_key
FROM $posts
LEFT JOIN $postmeta ON ( $posts.ID = $postmeta.post_id)
WHERE         
$postmeta.meta_key IN ('_course_code','_instructor_name')
AND  $posts.post_type = 'course'   
GROUP BY $posts.ID";

$results = $wpdb->get_results($query);       
echo "<pre>"; 
print_r($results);      
echo "</pre>"; 
$query = "
            SELECT $wpdb->posts.ID,$wpdb->posts.post_title,
            PM1.meta_value as _course_code,
            PM2.meta_value as _instructor_name
            FROM $wpdb->posts
            LEFT JOIN $wpdb->postmeta AS PM1 ON ( $wpdb->posts.ID = PM1.post_id AND PM1.meta_key = '_course_code')
            LEFT JOIN $wpdb->postmeta AS PM2 ON ( $wpdb->posts.ID = PM2.post_id AND PM2.meta_key = '_instructor_name')
            WHERE $wpdb->posts.post_type = 'course'
            AND $wpdb->posts.post_status = 'publish'
            AND ((PM1.meta_key = '_course_code') AND (PM2.meta_key='_instructor_name')) 
            GROUP BY $wpdb->posts.ID
            ORDER BY $wpdb->posts.post_date DESC

         ";

$results = $wpdb->get_results($query);

echo "<pre>"; print_r($results); die("here");