2016-12-06 3 views
-2

Я создаю сайт для гипотетического арендного бизнеса, и я пытаюсь проверить доступные ресурсы в течение определенного промежутка времени, когда пользователь нажимает кнопку «Добавить в корзину». У меня возникают проблемы с SQL-запросом, который выполняется, в основном (я думаю) из-за того, что моя переменная $ product_id является целым числом, но столбцы, которые я хочу запросить, находятся в форме «item1», «item2» и т. Д.Проверить доступность инвентаря для имеющегося арендного фонда

Логика, которую я пыталась использовать, заключалась в том, чтобы вычесть нужное количество из числа, доступного в таблице, взять минимум этих значений за данный промежуток времени, а затем проверить, в какой-либо точке это число опустилось ниже нуля ,

Вот соответствующий код:

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

Извините, я новичок в SO и немного разбросаны в данный момент. Я редактировал сообщение с var_dump. – AndrewCC

+0

Вы все еще не объяснили проблему. Какую ценность вы ожидаете вернуть? Почему вы вычитаете число из строки? Конечно, это не сработает. Почему вы используете функцию MIN по одному значению? Это ничего не сделает. –

ответ

0

Попробуйте это:

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

Спасибо за попытку помочь. Я не был уверен, сколько подробностей базовой структуры таблицы я должен опубликовать, но теперь я понимаю, что это было намного больше, чем я. Столами в моей таблице run_inventory являются дата (DATE) и один столбец для каждого из элементов, каждый в форме itemX (INT). Моя основная проблема заключается в том, что мне нужно выбрать из столбца, называемого, например, «item7», но $ product_id - это просто целое число. Я пытался использовать CONCAT в запросе, чтобы я мог вызвать правильное имя столбца, но я не уверен, что это правильный путь. – AndrewCC

+0

Нет проблем. См. Мое редактирование. Надеюсь, это поможет. –

 Смежные вопросы

  • Нет связанных вопросов^_^