【发布时间】:2021-01-20 13:29:54
【问题描述】:
我有一个products 表和一个inventory_order_product 表。我需要从products 表中选择product_id、product_name、product_unit 和product_status,还需要从inventory_order_product 表中选择quantity。我还需要以这种格式输出它 - Product Name (Quantity ProductUnit) example LG LED TV (20 Cartons)
我试过了,它没有显示任何东西
function fill_product_list($connect)
{
$query = "
SELECT products.product_id, products.product_name, products.product_unit, products.product_status
inventory_order_product.quantity
FROM products INNER JOIN inventory_order_product
ON products.product_id = inventory_order_product.product_id
WHERE products.product_status = 'active'
ORDER BY products.product_name ASC
";
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$output = '';
foreach($result as $row)
{
$output .= '<option value="'.$row["product_id"].'">'.$row["product_name"].' ('.$row["quantity"].' '.$row["product_unit"].')</option>';
}
return $output;
}
我需要选择active的所有产品,这就是我还需要选择product_status的原因
编辑:在我调整 SQL 语句之前,我包括了调用函数 fill_product_list 和原始函数的部分
这是我在插入数据时调用函数的地方 - 创建新订单
if(isset($_POST['btn_action']))
{
if($_POST['btn_action'] == 'Add')
{
$query = "
INSERT INTO inventory_order (user_id, inventory_order_total, inventory_order_date, inventory_order_name, inventory_order_address, payment_status, inventory_order_status, inventory_order_created_date)
VALUES (:user_id, :inventory_order_total, :inventory_order_date, :inventory_order_name, :inventory_order_address, :payment_status, :inventory_order_status, :inventory_order_created_date)
";
$statement = $connect->prepare($query);
$statement->execute(
array(
':user_id' => $_SESSION["userid"],
':inventory_order_total' => 0,
':inventory_order_date' => $_POST['inventory_order_date'],
':inventory_order_name' => $_POST['inventory_order_name'],
':inventory_order_address' => $_POST['inventory_order_address'],
':payment_status' => $_POST['payment_status'],
':inventory_order_status' => 'active',
':inventory_order_created_date' => date("Y-m-d")
)
);
$result = $statement->fetchAll();
$statement = $connect->query("SELECT LAST_INSERT_ID()");
$inventory_order_id = $statement->fetchColumn();
if(isset($inventory_order_id))
{
$total_amount = 0;
for($count = 0; $count<count($_POST["product_id"]); $count++)
{
$product_details = fetch_product_details($_POST["product_id"][$count], $connect);
$sub_query = "
INSERT INTO inventory_order_product (inventory_order_id, product_id, quantity, price, tax) VALUES (:inventory_order_id, :product_id, :quantity, :price, :tax)
";
$statement = $connect->prepare($sub_query);
$statement->execute(
array(
':inventory_order_id' => $inventory_order_id,
':product_id' => $_POST["product_id"][$count],
':quantity' => $_POST["quantity"][$count],
':price' => $product_details['price'],
':tax' => $product_details['tax']
)
);
$base_price = $product_details['price'] * $_POST["quantity"][$count];
$tax = ($base_price/100)*$product_details['tax'];
$total_amount = $total_amount + ($base_price + $tax);
}
$update_query = "
UPDATE inventory_order
SET inventory_order_total = '".$total_amount."'
WHERE inventory_order_id = '".$inventory_order_id."'
";
$statement = $connect->prepare($update_query);
$statement->execute();
$result = $statement->fetchAll();
if(isset($result))
{
echo 'Order Created Successfully.';
echo '<br />';
echo "Total Price: $". $total_amount;
echo '<br />';
echo "Order Number: ".$inventory_order_id;
}
}
}
}
此外,在我决定调整 SQL 语句以便它可以捕获 Product Name (Quantity ProductUnit) 之前,该函数运行良好。下面是我决定调整 SQL 语句之前的函数。
function fill_product_list($connect)
{
$query = "
SELECT * FROM products
WHERE product_status = 'active'
ORDER BY product_name ASC
";
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$output = '';
foreach($result as $row)
{
$output .= '<option value="'.$row["product_id"].'">'.$row["product_name"].'</option>'; }
return $output;
}
我们将不胜感激。
【问题讨论】:
-
很抱歉有明显的问题。你调用了这个函数吗?如果是这样,怎么做?你只显示它的定义。请包含更完整的代码,以便我们查看上下文。您是否在 PHP 之外运行 SQL 以确保它确实返回数据?
-
是的@Parfait 我调用了这个函数,所以我可以在创建新订单时列出所有
active产品。在我尝试调整它以捕获quantity和product_unit之前,该功能也可以完美运行。我已经包含了两个代码 -
将
INNER JOIN添加到不返回任何结果的查询意味着在WHERE条件下的两个表之间没有匹配项。LEFT JOIN是否返回结果?另外,我看不到第二个代码块在哪里调用fill_product_list。最后,有趣的是,您参数化了除最后一个UPDATE之外的所有查询。保持一致。为什么要在数值周围加上单引号?您可能正在使用允许这样做的 MySQL/MariaDB(请标记 BTW),但其他数据库会因类型不匹配而出错。
标签: php sql inner-join