sql >> データベース >  >> RDS >> PostgreSQL

Laravel5の単一行制限の更新が機能しない

    Oracle とは異なります または MySQL LIMITを使用してステートメントを更新します PostgreSQL更新ステートメント に直接 不可能です。したがって、limit(1)を連鎖させます compileUpdate LaravelのPostgresGrammarのメソッド クエリのコンパイルを担当するクラスは、whereステートメントのみをコンパイルします。

    ただし、更新される1つの行のみを返すサブクエリを使用する条件を設定することで、これを克服できます。このようなものが機能するはずです:

    DB::table("records")->whereIn('id', function ($query) use ($date_now) {
        $query->from('records')
              ->select('id')
              ->where('need_moderate', '=', 'no')
              ->where('locked_per_time', '<', $date_now->format("Y-m-d H:i:s"))
              ->limit(1);
    })->update(["locked_per_time" => $locked_per->format("Y-m-d H:i:s"), 'locked_by' => $mdkey]);
    

    whereIn('id', ...) 条件は、テーブルにidという名前の列があることを前提としています これは一意の識別子として使用できるため、サブクエリで条件に一致する最初の行を見つけることができます。




    1. SQL Serverのパフォーマンス—クラウドでのテスト

    2. Javaを使用してPostgresqlで画像を保存および取得する

    3. カンマ区切りの文字列をmysqlの行に分割します

    4. MySql-前の行の値と次の行の値を取得するにはどうすればよいですか?