![](/img/trans.png)
[英]How can i display more than one row in my table USING PHP & MYSQL database
[英]Can I add a new row to a table if a checkbox is checked using one query rather than nested? PHP, MySQL
經過大量的努力之后,我已經使此查詢正常工作-但它看上去笨拙,運行時感覺很慢。
我有一個名為UserTable的表,如果特定用戶對該項目說“是”,則會填充一個名為“ Item”的字段。 在這種情況下,我只想為該項目添加一行到UserTable中-換句話說,我不想在表中有很多user_ID / Item /'no'關系,只有user_ID / Item /'yes'回應。
我建立了一些代碼,向用戶顯示整個數據集,並允許他們更改其首選項,然后按update。 當它們更新時,將輸出一個名為$ checkbox的數組,其中包含被選中為“是”的項目編號(例如“ 1”,“ 3”,“ 6”)。 如果他們沒有打勾,則$ checkbox設置為“”。
這是相關的代碼-正如我所說的,它很笨拙,在FOREACH中帶有WHILE以及兩個驗證的IF語句。 我可以擺脫一個(或兩個!)循環並用SELECT類型的命令替換嗎?
foreach($checkbox as $value)
{if($value!="") {
$sql= "SELECT count(Item) as row_exists
FROM UserTable
WHERE Item = '$value' and
User_ID = '$current_user_id'";
$result = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
while ($iteminfo = mysqli_fetch_array($result)) {
If ((int)$iteminfo['row_exists']==0) {
$sql = "INSERT INTO UserTable
(User_ID,Item,Date) VALUES
('$current_user_id','$value',now() )";
$add_new_row = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
}
}
}
}
提前謝謝了。
您可以消除兩個if語句:
在!=“”上過濾復選框數組,然后循環遍歷這些結果。 如果檢查!=“”,則擺脫第一個。
擴展您的初始查詢,使其包括row_exists = 0,然后遍歷這些結果。 那擺脫了第二個如果。
實際上,您可以將兩個sql語句合並為一個復合條件插入。 您可以插入以下形式:
INSERT INTO table (SELECT ...)
因此,您可以看一下第一個查詢並將其改編/替換為上面查詢的SELECT ...部分,然后將第二個插入並改編/替換為上面的INSERT INTO...。
因此,如果一個用戶可以與多個項目相關聯,您似乎應該對此進行規范化,並且可能具有三個表-一個用於用戶,一個用於項目以及一個將用戶與項目相關的多對多表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.