ALTER SQL QUERY返回具有唯一自定义字段值、无重复值的帖子

时间:2012-05-22 作者:mrl

我目前有一个带有自定义字段“Name”的帖子列表,其中有几个帖子的“Name”值相同

我想检索一个帖子列表,所有帖子的“Name”值都是唯一的例如,帖子1和帖子2不能都是“迈克尔”

有没有办法在执行SQL查询之前直接修改它?我目前正在使用下面的功能(限制5篇帖子并随机排序)来更改查询。

function alter_the_query( $request ) {
        $dummy_query = new WP_Query();  // the query isn\'t run if we don\'t pass any query vars
        $dummy_query->parse_query( $request );

        if ($dummy_query->is_category()) {
        $request[\'posts_per_page\'] = 5;
                $request[\'orderby\'] = \'rand\';
        }
        return $request;
}
为了与未来版本的Wordpress兼容,我试图避免直接使用SQL,但如果这是唯一的方法,那么我仍然愿意接受这些建议。

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

如果您有多篇具有相同值的帖子,但您只希望最新的帖子具有任何值,只要值不重复,您最好在同一查询上运行两个循环:

/* Fetch all possible values - use this to order the 
results and define which get selected */
$valueids = new WP_Query(array(
posts_per_page => -1,
meta_key => \'key\',
));

/* First loop, to build an array of ids with single values */
$values = array();
$ids = array();
while ($valueids->have_posts()) : $valueids->the_post();
    $val = get_post_custom_values(\'key\');
        if(!in_array($val,$values) {
            $values[] = $val;
            $ids[] = $post-ID;
        }
endwhile;

$valueids->rewind_posts();
$valueids->set( \'posts_per_page\', 10 ) /* loop only for the ones you want */

/* Second loop, leaving out duplicated entries */
while ($valueids->have_posts()) : $valueids->the_post();
    if(in_array($post->ID,$ids) {
            // do you thing here
        }
endwhile;
ps:这是未经测试的,但它应该正常工作。

结束

相关推荐

在Visual Studio 2010中使用C#通过数据连接访问WordPress MySQL数据库

所以我在google上搜索了无数的教程,阅读了MySQL、Visual Studio、WordPress和Plesk上的文档。我试着把在这个网站上发帖作为最后的选择,似乎事情已经到了这个地步。简单地说,我想在另一个ASP上显示WordPress博客中的类别列表。NET/C#我拥有的网站。没有专门的类别名称RSS,否则我会使用RSS提要中的XML和XSLT以这种方式显示类别列表。我得出的结论是,我必须直接从我的其他网站访问我的WordPress数据库(分类名称存储在那里)。为此,我在本地计算机(C:Driv