2

Node.js「node-mysql」のMySQLドライバーを使用していますがREPLACE into、カウンターを実行してインクリメントする構文に苦労しています。countここに私がこれまでに持っているものがあります.フィールドは、現在のテーブル値を1増やしたい場所であることに注意してください:

connection.query('REPLACE INTO links SET ?', { symbol: statName, timestamp: now, count: count + 1  }, function(err, result) {

誰でもこれを行う方法についてアドバイスできますか?

4

2 に答える 2

2

ON DUPLICATE KEY UPDATEでINSERTを使用することで解決策を見つけました:

connection.query('INSERT INTO links SET symbol = ?, timestamp = ?, title = ?, url = ? ON DUPLICATE KEY UPDATE count = count + 1', [statName, now, interaction.data.links.title[y], interaction.data.links.url[y]], function(err, results) {
                if (err) console.log(err);
            });
于 2012-06-17T08:29:04.217 に答える
2

REPLACE は UPDATE ではなく INSERT に似ていることに注意してください。

内部的には、REPLACEは機械的に DELETE の後に INSERT が続きます。MySQL ドキュメントでは次のように説明されています。

REPLACE は INSERT とまったく同じように機能しますが、テーブル内の古い行が PRIMARY KEY または UNIQUE インデックスの新しい行と同じ値を持つ場合、新しい行が挿入される前に古い行が削除される点が異なります。セクション13.2.5「INSERT 構文」を参照してください。

REPLACE は、SQL 標準に対する MySQL 拡張機能です。挿入するか、削除して挿入します。標準 SQL に対する別の MySQL 拡張 (挿入または更新) については、セクション13.2.5.3「INSERT ... ON DUPLICATE KEY UPDATE 構文」を参照してください。

count列をインクリメントする場合は、 INSERT INTO ... ON DUPLICATE KEY UPDATEを使用します。

JavaScript エンジンがINSERT INTO ... ON DUPLICATE KEY UPDATEで動作することを確認してください。そうでない場合は、カウントを newcount としてキャプチャし、newcount をインクリメントして、その数をREPLACE

connection.query('REPLACE INTO links SET ?', { symbol: statName, timestamp: now, count: newcount }, function(err, result) {

試してみる !!!

于 2012-06-15T17:16:52.300 に答える