2016-08-21 4 views
0

テーブルからデータを選択して同じパスで同じエントリを更新することが可能かどうかを知りたいのですが、php/mysql:テーブルから選択して1つのクエリで更新する

SELECT message_content, message_times_read FROM messages WHERE message_id = 1 

その後

UPDATE messages SET message_times_read = message_times_read + 1 WHERE message_id = 1 

は、私は1回の呼び出しでそれらを行うことができますか?もっと重要なことに、これが可能なら、私はすべきですか? (これは適切なプラクティスと考えられますが、これは異なるバージョン間で互換性がありますか?パフォーマンスは向上しますか?)

+1

いくつかのデータベースはこの種のものをサポートしています。 [PostgreSQLの 'UPDATE RETURNING'](https://www.postgresql.org/docs/9.1/static/sql-update.html)。しかし、私が知っている限り、MySQLはそうではありません。 – Chris

+0

あなたができることは、最初に選択クエリを実行し、その行をフェッチしたときに変数に入れ、その変数を使用して更新クエリを実行することができます。これは通常非常に速く起こり、ユーザーは気づかないかもしれません。 –

+1

2つのクエリをトランザクションに入れて、別のプロセスがそれらの間に入ることができないようにします。 – Barmar

答えて

0

同じクエリで複数のクエリを実行する必要がある場合は、トリガを作成する必要があります。詳細について知りたい場合は、このリンクをチェックしてください:https://www.sitepoint.com/how-to-create-mysql-triggers/

+0

トリガを使用する必要はありません。ストアドプロシージャはどうですか?トランザクション? – Chris

+0

私が正しく理解していれば、これは私が望むものを達成できません。この方法でデータを取得する方法はないようです。私は何か見落としてますか? – DavidTonarini

関連する問題