3つのキー(userId、udid、token)のいずれかで行を識別したいDBがあります。3つすべてが一意のキーであり、最初のキーもプライマリで自動増分です。基本的に、キーの1つが同じである場合、すべての値を更新したいと思います。残念ながら、私が使用する場合:
INSERT INTO users (udid, nickname, playerID, `language`, app, token,
`In Arrivo HD`) VALUES ('AB71C145-2FFE-4BA8-B0E7-9F121948C962', 'Fabry65', 'G:274138044', 'it_IT', 'In Arrivo HD',
'605a383a7e3469a3da0b471cd5b73af7384ca5e389eeb7cd72e550e96f37f450', NOW()+ INTERVAL 1 YEAR)
ON DUPLICATE KEY UPDATE udid='AB71C145-2FFE-4BA8-B0E7-9F121948C962',
token='605a383a7e3469a3da0b471cd5b73af7384ca5e389eeb7cd72e550e96f37f450', lastAccess=NOW(), active=1, nickname='Fabry65',
playerID='G:274138044',`language`='it_IT', app='In Arrivo HD'
そして、繰り返される鍵はたまたまトークンです、私はエラーがあります:
キー「トークン」のエントリ「605a383a7e3469a3da0b471cd5b73af7384ca5e389eeb7cd72e550e96f37f450」が重複しています
もちろん、他の2つのキーを繰り返す場合も、同じことが起こります。DUPLICATE KEYUPDATEのチェーンが機能していないようです。どうすればいいですか?
簡単に言うと、私の問題は、3つのキーのいずれかが同じである場合は行を更新し、すべてが異なる場合は新しい行を挿入することです。
わかりました、私は解決策を見つけたと思います:
$query = "UPDATE users SET token='token', udid='$udid', lastAccess=NOW(), active=1, nickname='".$nickname."', playerID='".$playerID."',`language`='".$language."', app='".$app."' WHERE userId=$userId";
$resultUpdate=$mysqli->query($query);
if (!$resultUpdate){
$query = "UPDATE users SET udid='$udid', lastAccess=NOW(), active=1, nickname='".$nickname."', playerID='".$playerID."',`language`='".$language."', app='".$app."' WHERE userId=$userId"
}
トークンも更新しようとして最初のクエリを実行します。失敗した場合は、トークンが同じであることを意味するため、トークンについて言及せずに更新します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加