У меня есть таблица в mysql, скажем: ID - year - month
Я поместил unique_constraint на year
и month
. Таким образом, в году не может быть двух одинаковых месяцев.
ID
используется для получения комбинации года и месяца. Допустим, у нас есть следующие значения:
ID - year - month
1 - 20 - 1
2 - 20 - 2
3 - 20 - 5
Тогда ID
3 будет май 2020 года. Однако эта таблица создается динамически. Я загружаю определенные c данные и мне нужно вставить все комбинации лет и месяцев.
Сначала я использовал MySQL commando REPLACE INTO
, потому что думал, что он не добавит неуникальную строку. И он не добавляет неуникальную строку, но обновляет ID
каждый раз, что приводит к сбоям в моих внешних ключах.
Как мне это исправить? Просто используя INSERT
? Из-за unique_constraint вставка просто выйдет из строя и вернет ошибку.
Теперь я исправил это следующим образом:
$conn = new mysqli(HOST, USER, PASS, DTBS);
$stmt = $conn->prepare("SELECT ID FROM periods WHERE month=? AND year=?");
$stmt->bind_param("ii", $month_, $year_);
$month_ = $month;
$year_ = $year;
$stmt->execute();
$stmt->bind_result($id);
$stmt->fetch();
$rows = $stmt->num_rows;
$stmt->close();
if ($rows == 0) {
$stmt = $conn->prepare("INSERT INTO periods (year, month) VALUES (?, ?)");
$stmt->bind_param("ii", $year_, $month_);
$year_ = $year;
$month_ = $month;
$stmt->execute();
$stmt->close();
}
$conn->close();