繁体   English   中英

SQL 查询到 SELECT 来自多个表的多个列用于显示

[英]SQL query to SELECT multiple columns from multiple tables for display

我有一个products表和一个inventory_order_product表。 我需要 select product_idproduct_nameproduct_unitproduct_status来自products表,以及quantity来自inventory_order_product表。 我还需要 output 以这种格式 - Product Name (Quantity ProductUnit)示例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;
}

我需要 select 所有active的产品,这就是我还需要 select product_status的原因

编辑:在我调整 SQL 声明之前,我包括了我调用 function fill_product_list和原始 function 的部分

这是我在插入数据时调用 function 的地方 - 创建新订单

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。

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;
}

任何援助将不胜感激。

我通过选择所有记录来解决它。


function fill_product_list($connect)
{
    $query = "
    SELECT *
    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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM