通常、更新/挿入するときはon duplicate key update
ステートメントを使用します。しかし、私はそのようなテーブルを挿入/更新しています:
id | neutral text | language | translation
---+--------------+----------+------------
0 | SUBMIT | en | Submit
1 | SUBMIT | cs | Odeslat
2 | SUBMIT | fr | Démarrer
3 つのテーブルを作成する必要があることはわかっていますが、プロジェクトはそれほど大きくないため、かなり単純にすることにしました。
では、翻訳を変更または追加したい場合は、次のようにします。
/*
$this->lang_class->table = the name of my table
$offset = neutral text name
$this->lang = language name
$value = new translation
*/
$this->debug("Translate attempt!<br />");
//Try to update, insert will be performed if update returns 0 rows
$update = $this->pdo->prepare("UPDATE `{$this->lang_class->table}` SET content='$value' WHERE lang='{$this->lang}' AND name='$offset'");
$update->execute(); //try to update
if($update->rowCount()==0) { //If no update happened, insert
$this->debug("Creating new translation entry.<br />");
$this->execsql("INSERT INTO `{$this->lang_class->table}` (lang, name, content) VALUES ('{$this->lang}', '$offset', '$value')");
}
return $value;
問題は、新しい翻訳が古い翻訳と一致する場合があることです。このような場合、UPDATE は 0 行を返し、INSERT が実行されます。
では、1 つのテーブルだけに固執したい場合は、どのようなアプローチを使用すればよいでしょうか?