Wordpress - 使用$ wpdb->更新并限制1

时间:2016-08-18 14:22:51

标签: mysql wordpress

这可能是一个愚蠢的问题,但我正在尝试使用$wpdb->update而不是$ wpdb->查询但我不确定如何使用限制1.所以而不是

$wpdb->query("update {$wpdb->prefix}vp_pms_group_users set read = '1', seen = '1', time_seen = '{$date_time_seen}' where message_id = '{$last_message_id}' and group_id = '{$group_id}' and to_username = '{$session_uid}' and read = '0' limit 1");

我试过

$wpdb->update($wpdb->prefix . "vp_pms_group_users", array(
                'read' => '1',
                'seen' => '1',
                'time_seen' => $date_time_seen,
            ),
            array(
                'message_id' => $last_message_id,
                'group_id' => $group_id,
                'to_username' => $session_uid,
                'read' => '0',
            ),
            LIMIT 1 //????
);

我应该在阵列之后还是在里面使用限制? 感谢。

1 个答案:

答案 0 :(得分:1)

这是一个答案,它并不漂亮,但基于查看$wpdb内的方法链,它可能是实现你的目标的唯一方法之后,仍然使用$wpdb->update()

第1步。 使用您稍后要替换的唯一参数进行更新,请注意,这必须是传递给WHERE子句的最后一个参数,否则将其替换为LIMIT 1将导致语法错误SQL语句。

类似的东西:

$wpdb->update(
    $wpdb->prefix . "vp_pms_group_users", 
    array(...),
    array(
        ...
        'MyReplacementLimit' => 1
    )
);

这应该给你一个像这样的SQL语句:

UPDATE vp_pms_group_users SET ... WHERE ... AND MyReplacementLimit = 1;

第2步: 现在,您可以使用query过滤器将该伪条款替换为限制...

add_filter('query', function ($query) {
    return str_replace('AND MyReplacementLimit = 1', 'LIMIT 1', $query);
});

这是未经测试,完全基于阅读$wpdb中提供的代码。可能需要一些调整才能正常工作。

更简单的解决方案: 您可以直接使用SQL,只要您使用$wpdb->prepare()它可能更容易阅读,并且比上述方法更容易理解。