簡體   English   中英

如果使用一個查詢而不是嵌套的復選框選中了復選框,是否可以向表中添加新行? PHP,MySQL

[英]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語句:

  1. 在!=“”上過濾復選框數組,然后循環遍歷這些結果。 如果檢查!=“”,則擺脫第一個。

  2. 擴展您的初始查詢,使其包括row_exists = 0,然后遍歷這些結果。 那擺脫了第二個如果。

實際上,您可以將兩個sql語句合並為一個復合條件插入。 您可以插入以下形式:

INSERT INTO table (SELECT ...)

因此,您可以看一下第一個查詢並將其改編/替換為上面查詢的SELECT ...部分,然后將第二個插入並改編/替換為上面的INSERT INTO...。

因此,如果一個用戶可以與多個項目相關聯,您似乎應該對此進行規范化,並且可能具有三個表-一個用於用戶,一個用於項目以及一個將用戶與項目相關的多對多表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM