如何编写:$wpdb->更新数组中有WHERE NOT值对

时间:2013-05-17 作者:GrimPanda

我需要将Posteta表中所有值不是0的元键更新为0。

我试过这个。。没有爱(虽然我不知道为什么……):

$status = $wpdb->query("UPDATE {$wpdb->prefix}postmeta SET meta_value=0 WHERE meta_key = _wti_like_count AND meta_value <> \'0\'");
我在这个概念上,但如何说“!0”而不是键列表中的0?

$wpdb->update(\'wp_postmeta\', array(\'_wti_like_count\' => \'0\'), array(\'_wti_like_count\' => \'0\'));
非常感谢!

更新:我修复了$wpdb->query 其工作原理如下:

$status = $wpdb->query("UPDATE {$wpdb->prefix}postmeta SET meta_value=\'0\' WHERE meta_key = \'_wti_like_count\' AND meta_value <> \'0\'");
但是,我仍然想知道是否有方法将密钥对数组传递给WHERE 的参数$wpdb->update 并请求!= 价值

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

The$wpdb 类属性可以使用默认的WordPress表,如下所示:

  • $GLOBALS[\'wpdb\']->postmeta
所以不需要使用prefix, 等

meta_query

正如您从Custom field parameter 文档,没有什么比<> (或换句话说:“不等于”)运算符。WP中的等效运算符应为!= (人类语言:“不是”)或NOT LIKE.

因此,只需按照以下思路做一些事情:

$query = new WP_Query( array(
    \'meta_query\' => array(
        array(
            \'key\'     => \'_wti_like_count\',
            \'value\'   => \'0\',
            \'compare\' => \'NOT LIKE\',
            # \'type\'    => \'numeric\'
        )
    )
) );
这将使用此元值查询您的所有帖子。我想知道的是你为什么string 作为integer. 我不会那样做,尤其是如果我用柜台的话。看看我的评论:Thetype, 这将允许您稍后进行更具体的查询。

更新元条目,然后简单地遍历它们并更新值。

if ( $query->have_posts() )
{
    while ( $query->have_posts() )
    {
        $query->the_post();
        # Do debugging, logging or sleep() here to avoid timeouts
        update_post_meta( \'_wti_like_count\', \'0\', true );

        # I still believe it should be an INTeger
        update_post_meta( \'_wti_like_count\', 0, true );
    }
}

SO网友:Charles Clarkson

看起来不可能使用!=在哪里。以下是update() 方法:

$where_formats = $where_format = (array) $where_format;
foreach ( (array) array_keys( $where ) as $field ) {
    if ( !empty( $where_format ) )
        $form = ( $form = array_shift( $where_formats ) ) ? $form : $where_format[0];
    elseif ( isset( $this->field_types[$field] ) )
        $form = $this->field_types[$field];
    else
        $form = \'%s\';
    $wheres[] = "`$field` = {$form}";
}
The$wheres[] 这句话很有说服力。仅显示= 从未使用过。稍后将使用该阵列:

$sql = "UPDATE `$table` SET " . implode( \', \', $bits ) . \' WHERE \' . implode( \' AND \', $wheres );
在您的情况下,查询可以在不检查0. 结果应该是一样的(虽然会影响更多的行),但该方法似乎仅限于= 在WHERE子句中。

SO网友:sumit
add_filter( \'query\', \'query_report\', 10000 );
function query_report($sql){ 
    var_dump($sql); 
    return $sql;
}
结束

相关推荐

用数值筛选WP_QUERY META_QUERY不起作用

这是一个非常密集的标题。我有一个自定义帖子类型“event”,它有一个日期/时间选择器字段“event\\u Date”,这要归功于高级自定义字段插件。此日期/时间选择器将UNIX时间戳保存到数据库中。我正在尝试使用WP\\u Query获取今天或将来的所有事件。这是我现在掌握的代码:$args = Array( \'post_type\' => \'event\', \'posts_per_page\' => -1, \'