正規化されたデータベースに書き込むとき、私はこのようなロジックを頻繁に使用します。
擬似コード:
is the thing I want in the table?:
yes - get it's ID
else
no - insert it, then get it's ID
PHP の場合:
// is the useragent in the useragent table?
// if so, find the id, else, insert and find.
$useragentResult = $mysqli->query("SELECT id FROM useragent WHERE name = '".$useragent."' LIMIT 1");
if ($useragentResult->num_rows == 0) {
// It is not in there
$mysqli->query("INSERT INTO useragent (name) VALUES ('".$useragent."')");
$resultID_object = $mysqli->query("SELECT LAST_INSERT_ID() as id");
$row = $resultID_object->fetch_object();
$useragentID = $row->id;
} else {
// It is, so find it and set it
$useragentData = $useragentResult->fetch_object();
$useragentID = $useragentData->id;
}
これは (PHP だけが原因ではありません!) 見苦しく感じられます。
これを行う本当の方法は何ですか、それともこれが最善の方法ですか?