2015-06-01 48 views
1

如何限制插入僅針對表中每個類別的3行?我正在使用php和pdo。我有一些類別,每個類別必須有最多3個子類別。一切都存儲在分貝,表格看起來像這樣。在插入期間允許表格中最多包含三行

要說清楚!我在菜單中有一些類別,每個類別最多可以有3個子類別。當然不是用同一個名字,但是在每個類別中它不能超過3個。我當時輸入了一個,這意味着您可以在當時插入多個,但在db中不能超過3個。

一些類別

- some subcategory 
- some subcategory 
- some subcategory 

類別

ID |類別|

子類別

ID | subcategory_name | id_category |

現在,我的代碼看起來像這樣。

if(isset($_POST['sub'])) { 

    $InputSubcategory = $_POST['InputSubcategory']; 
    $InputId   = $_POST['InputId']; 

    $sql = $pdo->prepare("INSERT INTO subcategory(subcategory_name,id_category) 
          VALUES(:field1,:field2)"); 
    $sql->execute(array(':field1' => $InputSubcategory, 
         ':field2' => $InputId)); 
    $affected_rows = $sql->rowCount(); 
    if ($affected_rows > 0) { 
    header("refresh:0"); 
    die(); 
    } 
}   
if(isset($_POST['cat'])) { 

    $InputCategory = $_POST['InputCategory']; 

    $sql = $pdo->prepare("INSERT INTO category(category) 
          VALUES(:field1)"); 
    $sql->execute(array(':field1' => $InputCategory)); 
    $affected_rows = $sql->rowCount(); 
    if ($affected_rows > 0) { 
    header("refresh:0"); 
    die(); 
    } 
} 

編輯: 我做它的工作!接下來我做了什麼。每個表中有Count()行,然後在if中比較計數的數字是否大於或等於3.如果if爲true,則顯示錯誤,如果false則繼續插入。

if(isset($_POST['cat'])) { 

    $nRows = $pdo->query('select count(*) from category')->fetchColumn(); 

    if ($nRows >= 3) { 
     echo' 
     <div class="alert alert-warning"> 
     <span class="glyphicon glyphicon-ok"></span> <strong>Warning</strong> 
      <hr class="message-inner-separator"> 
      <p>You reach maximum category limit.</p> 
     </div>'; 
     header("refresh:2;url=insert.php"); 
    } else { 

     $InputCategory = $_POST['InputCategory']; 

     $sql = $pdo->prepare("INSERT INTO category(category) 
          VALUES(:field1)"); 
     $sql->execute(array(':field1' => $InputCategory)); 
     $affected_rows = $sql->rowCount(); 
     if ($affected_rows > 0) { 
     header("refresh:0"); 
     die(); 
     } 

    } 
} 
+0

在兩個插入查詢中應用「LIMIT 3」。謝謝。 –

+0

一個解決方案是向'category'表中添加插入觸發器以防止插入。當嘗試插入第四個子類別時,您希望發生什麼? –

+0

沒什麼特別的,只是說插入了最大數量的子類別。如果我限制3,這意味着我不能一次插入多3,或者3是表中最大的行數? –

回答

0

您可以通過觸發器防止超過3個數據庫被插入數據庫本身。

DELIMITER $$ 
CREATE TRIGGER subcategory_bi BEFORE INSERT ON subcategory FOR EACH ROW 
BEGIN 

    IF (SELECT COUNT(1) FROM subcategory sc WHERE sc.category_id = NEW.category_id) >= 3 THEN 
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'this category already has the max allowed subcategories'; 
    END IF; 

END $$ 
DELIMITER ;