У меня есть переменная в $ _POST, которая выглядит следующим образом:Использование распределительной таблицы с повторяющимися идентификаторами, вызывающих confusiont с запросом SQL в цикле PHP Еогеасп
[genre_id] => Array
(
[0] => 1
[1] => 3
)
У меня есть блок PHP кода:
foreach ($_POST["genre_id"] as $key => $value) {
$genre_query = "UPDATE books_genres SET genre_id = $value WHERE book_id = $book_id";
$genre_result = mysqli_query($connection, $genre_query);
if ($genre_result && mysqli_affected_rows($connection) >= 0) {
echo("Genre Update: Sucess<br>");
} else {
echo("Genre Update: Fail<br>");
}
}
Стол под названием books_genres
представляет собой соединительную таблицу из-за многих отношений. Это означает, что некоторые из $book_id
будут дублированы. Что явно происходит, так это то, что каждая строка с указанным book_id
обновляется каждый раз.
Должен ли я иметь другую колонку в моей таблице books_genres? Даже тогда я не уверен, как я буду ссылаться на этот индекс? Или я должен каким-то образом писать запрос?
Обычно вы не обновляете соединительную таблицу. Вы удаляете старые значения и вставляете новые. Если вы хотите сделать этот тип обновления, вам нужно будет включить «старый» genre_id в качестве дополнительного предиката в свой оператор where, чтобы он знал, какой genre_id вы хотите обновить. –
@sean_lange, поэтому я бы обновил как таблицы книг, так и жанры, каждый из которых имеет код, который обновляет таблицу books_genres отдельно? Я понимаю, что вы говорите, более стандартно? –
№ Пункт точки соединения состоит в том, что вам ничего не нужно обновлять. У него есть ключ от обеих таблиц? Ключ не меняется в вашей таблице? Если вы не денормализовали свои структуры, вам действительно не нужно обновлять таблицы соединений, за исключением редких сценариев. Если данная книга была классифицирована как «классическая», а затем переклассифицирована как «ужас», вы удаляете классическую запись и вставляете запись ужаса. Возможно, объяснение этого объясняло бы ddl и некоторые примеры данных. –