Описание проблемы:
есть 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. Я в пхп не силён...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как разбить страницу состоящую из тысяч строк текста на много страниц (пагинация) в codeigniter?
Уже не первый сталкиваюсь с тем, что, когда в поле с типом TEXT вместе с текстом записывается символ плюс (+), получаю не корректное поведениеЛибо...
ЗдравствуйтеПомогите решить проблему: есть zip-архив неизвестно где и как созданный, нужно распаковать все файлы во вложенную папку, причем...
Сейчас я делаю так: при каждой загрузке страницы, я обновляю в кеше ключ "{$user->id}online" на 5 мин