我正在爲假設的出租業務構建網站,我試圖在用戶單擊「添加到購物車」按鈕時檢查指定時間範圍內的可用庫存。由於我的$ 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減去$數量,但我似乎無法圖確切地說問題出在哪裏。
那麼,有什麼問題嗎? –
對不起,我是新來的,現在有點慌張。我用var_dump編輯了帖子。 – AndrewCC
你還沒有解釋這個問題。你希望返回什麼價值?你爲什麼要從字符串中減去一個數字?當然,這是行不通的。你爲什麼在一個值上使用MIN函數?這不會做任何事情。 –