2016-12-06 41 views
-2

我正在爲假設的出租業務構建網站,我試圖在用戶單擊「添加到購物車」按鈕時檢查指定時間範圍內的可用庫存。由於我的$ product_id變量是一個整數,但我想查詢的列的形式爲「item1」,「item2」等,所以我在運行的SQL查詢中遇到了一些麻煩,主要是(我認爲)。查看正在運行的庫存以查找可用的出租庫存

我試圖使用的邏輯是從表中可用數量中減去所需數量,在給定時間範圍內取這些數值的最小值,然後檢查在任何時候該數字是否低於零。

下面是相關代碼:

switch ($action) { 
case 'view': 
    $cart = cart_get_items(); 
    break; 
case 'add': 
    $product_id = filter_input(INPUT_GET, 'product_id', FILTER_VALIDATE_INT); 
    $quantity = filter_input(INPUT_GET, 'quantity'); 
    $pickup = filter_input(INPUT_GET, 'pickup'); 
    $return = filter_input(INPUT_GET, 'return'); 

    // validate the quantity entry 
    if ($quantity === null) { 
     display_error('You must enter a quantity.'); 
    } elseif (!is_valid_number($quantity, 1)) { 
     display_error('Quantity must be 1 or more.'); 
    } 

    // check for available inventory 
    $query = "SELECT MIN((SELECT CONCAT('item',:product_id)) - :quantity) FROM running_inventory WHERE date BETWEEN :pickup AND :return"; 
    $statement = $db->prepare($query); 
    $statement->bindValue(':product_id', $product_id); 
    $statement->bindValue(':quantity', $quantity); 
    $statement->bindValue(':pickup', $pickup); 
    $statement->bindValue(':return', $return); 
    $statement->execute(); 
    $available = $statement->fetch(); 
    $num_avail = $available[0]; 
    var_dump($num_avail); 
    $statement->closeCursor(); 
    if ($num_avail - $quantity >= 0) { 
    cart_add_item($product_id, $quantity); 
    } else { 
     display_error('The indicated quantity of stock is not available for your rental period.'); 
    } 
    $cart = cart_get_items(); 
    break; 

這是$可用的var_dump:

array(2) { ["MIN((SELECT CONCAT('item','6')) - '3')"]=> string(2) "-3" [0]=> string(2) "-3" } string(2) "-3" 

這顯然只是從0減去$數量,但我似乎無法圖確切地說問題出在哪裏。

+0

那麼,有什麼問題嗎? –

+0

對不起,我是新來的,現在有點慌張。我用var_dump編輯了帖子。 – AndrewCC

+0

你還沒有解釋這個問題。你希望返回什麼價值?你爲什麼要從字符串中減去一個數字?當然,這是行不通的。你爲什麼在一個值上使用MIN函數?這不會做任何事情。 –

回答

0

試試這個:

$query = "SELECT item{$product_id} - :quantity FROM running_inventory WHERE date BETWEEN :pickup AND :return"; 
+0

感謝您嘗試提供幫助。我不確定我應該發佈多少底層表結構的細節,但現在我意識到它比我做的要多得多。我的running_inventory表中的列是日期(DATE)和每個項目的一列,每個項目的格式爲itemX(INT)。我的主要問題是我需要從名爲「item7」的列中進行選擇,但$ product_id只是一個整數。我試圖在查詢中使用CONCAT,以便我可以調用正確的列名稱,但我不確定這是否是正確的方式。 – AndrewCC

+0

沒有probs。看我的編輯。希望它有幫助。 –

相關問題