我在$ _ 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和一些示例數據將有助於解釋這一點。 –