2016-08-18 7 views
0

これはおそらくばかげた質問ですが、$ wpdb-> queryではなく$wpdb->updateを使用しようとしていますが、制限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 //???? 
); 

私が配列した後、またはそれの内側に制限を使用すべきで試してみましたか?おかげさまで ここで

+0

'insert'メソッドでコードを見ると、' UPDATE $ table SET $ fields WHERE $ conditions; 'というクエリが実行され、制限を追加するためのフィルタはありません。 – naththedeveloper

+0

さらに、 'insert'メソッドによって直接呼び出される' query'メソッドにはフィルタがありますが、その正確なクエリをフィルタリングして制限を追加するのは難しいでしょうが、利用可能です。 '$ query = apply_filters ( 'query'、$ query); '。がんばろう。 – naththedeveloper

答えて

1

が答えだ、それはかなりありませんが、$wpdb内のメソッドチェーンを見に基づいて、それはおそらくあなたが後にしているものを達成するための唯一の方法だし、まだ$wpdb->update()を使用しています。

ステップ1. そうLIMIT 1でそれを置き換えることは、あなたの中に構文エラーが発生します、これはWHERE句に渡された最後のパラメータでなければならないことに注意してください、あなたは後で置き換えますユニークなパラメータを使用してアップデートを行いますSQLステートメント。

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

ステップ2: 今、あなたとその偽の句を置き換えるためにqueryフィルタを使用することができます。これは、あなたがそのようなSQL文を与えるべきである

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

:よう

何か限界...

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

であり、純粋に$wpdbで利用可能なコードを読むことに基づいています。正しく動作するには、いくつか微調整が必​​要な場合があります。

簡単な解決策:あなたは、それはおそらく、上記のアプローチよりも読みやすく、そしてより理解だ$wpdb->prepare()を使用しているよう あなたはいつもちょうど限り、直接SQLを使用することができます。

+0

ありがとう!私はあなたの方法を使用しようとします! – XiLab

関連する問題