Mysql Wordpress-使用$wpdb->;更新和限制1

Mysql Wordpress-使用$wpdb->;更新和限制1,mysql,wordpress,Mysql,Wordpress,这可能是一个愚蠢的问题,但我尝试使用$wpdb->update而不是$wpdb->query,但我不确定如何使用limit1。所以不是 $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 = '{$gro

这可能是一个愚蠢的问题,但我尝试使用
$wpdb->update
而不是$wpdb->query,但我不确定如何使用limit1。所以不是

$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 //????
);
我应该在数组之后还是在数组内部使用limit?
谢谢。

这里有一个答案,它并不漂亮,但基于查看
$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;
第二步: 现在,您可以使用
query
过滤器将该伪子句替换为limit

add_filter('query', function ($query) {
    return str_replace('AND MyReplacementLimit = 1', 'LIMIT 1', $query);
});
这是未经测试的,完全基于对
$wpdb
中可用代码的阅读。它可能需要一些调整才能正常工作

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

不可能,如果您查看
insert
方法中的代码,它会运行以下查询:
UPDATE$table SET$fields WHERE$conditions
没有可用于添加限制的筛选器。进一步查看后,
查询
方法中有一个筛选器,该筛选器由
插入
方法直接调用,要筛选出确切的查询以添加限制可能会有困难,但它是可用的<代码>$query=apply_过滤器('query',$query)。祝你好运,谢谢!我会试着用你的方法!