我在$ _ POST变量看起来像这样利用结表:与SQL查询引起PHP foreach循环内confusiont重复的ID
[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表中添加另一列吗?即使如此,我不知道我将如何引用该索引?或者我应该以某种方式编写查询?
通常,您不会更新联结表。您将删除旧值并插入新值。如果你想做这种类型的更新,你需要在你的where子句中包含“old”genre_id作为附加谓词,这样它就知道你想更新哪个genre_id。 –
@sean_lange所以我会更新书籍和流派表格,然后分别更新books_genres表格的代码?我是否理解你所说的更标准? –
不可以。结点表的一点是你不需要更新任何东西。它有两个表的关键权利?关键是你的表没有改变吗?除非你已经非结构化你的结构,否则除非在非常罕见的场景中,否则不需要更新结合表。如果某本书被归类为“古典”,然后被重新归类为“恐怖”,那么您将删除古典词条并插入恐怖词条。也许发布ddl和一些示例数据将有助于解释这一点。 –