Описание проблемы:
есть 2 таблицы tabel_home и table_users и они связаны 1 ко многим и при добавлении новой записи в таблицу tabel_home приходится проверять есть запись в tabel_users, если есть получать её id если нет добавлять и получать id.
Сейчас использую php для решения данное:
function GetUserId($user_name, $mysqli) {
$sql_select = "SELECT id FROM tabel_users WHERE user = $user_name;";
if($result_id = $mysqli->query($sql_select)) {
if($result_id != Null) {
return $result_id->fetch_assoc()['id'];
} else {
$sql_insert = "INSERT INTO tabel_users (user) VALUE ($user_name);";
$mysqli->query($sql_insert);
return $mysqli->insert_id;
}
} else {
return False;
}
}
Но интересно есть более быстрый и удобный способ получений или добавление записи и получения её id и желательно использую SQL.
Самое простое решение - это без всяких проверок выполнить вставку. Если такой записи нет - она вставится. Если есть, то ограничение уникального индекса tabel_users(user) (надеюсь, таковой имеется? иначе всё описанное в вопросе не имеет смысла) не позволит вставить - но эту ошибку надо просто проигнорировать. После этого - неважно, какой из вариантов имел место,- запись в таблице ЕСТЬ. Значит, можно спокойно делать SELECT id для дальнейшего употребления. Иными словами:
function GetUserId($user_name, $mysqli) {
$sql_insert = "INSERT IGNORE INTO tabel_users (user) VALUE ($user_name);";
$mysqli->query($sql_insert);
$sql_select = "SELECT id FROM tabel_users WHERE user = $user_name;";
return $mysqli->query($sql_select));
}
UPD:
Или сразу
function GetUserId($user_name, $mysqli) {
$sql = "INSERT IGNORE INTO tabel_users (user) VALUE ($user_name); SELECT id FROM tabel_users WHERE user = $user_name;";
return $mysqli->query($sql));
}
PS. Поправьте return, чтобы получить второй рекордсет, который от SELECT-a. Я в пхп не силён...
Продвижение своими сайтами как стратегия роста и независимости