【问题标题】:MySQL php join 4 tables and match 2 of them on another columnMySQL php加入4个表并在另一列上匹配其中的2个
【发布时间】:2017-07-13 19:59:51
【问题描述】:

我有 4 张桌子

产品、product_description、product_to_category、category_description

这是我的表格作为列的内容

产品

|产品编号 |型号 |数量


产品描述

|产品编号 |语言标识 |姓名 |说明


product_to_category

|产品编号 |类别 ID |


category_description

|类别 ID |语言标识 |姓名 |描述 |


我可以在 category_id 上加入 product_to_categorycategory_description 吗?如何加入?


到目前为止,这是我的代码,它可以工作,我在他们的 product_id 上加入了 3 个表,但我无法加入 category_description,因为它没有 product_id

我的代码背后的想法是从 category_description

中获取 name
<?php
    include '../config.php';
    $servername = "localhost";
    $username = DB_USERNAME;
    $password = DB_PASSWORD;
    $database = DB_DATABASE;

    // Create connection
    $conn = new mysqli($servername, $username, $password, $database);

    // Category Connection


    //Product connection
    $sql = "SELECT * FROM product,product_description,product_to_category 
            WHERE product.product_id = product_description.product_id 
            AND product.product_id = product_to_category.product_id
            AND product_description.language_id = 2";

    $conn->set_charset('utf8mb4');
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        while ($product = $result->fetch_assoc()) {
            $product_name           = $product["name"];
            $product_category       = $product["category_id"];
            $product_id             = $product['product_id'];
            $product_description    = $product["description"];
            $product_model          = $product["model"];
            $product_price          = $product["price"];
            $product_image          = $product["image"];
            $product_qty            = $product["quantity"];

            echo $product_name . "<br>";
    }
}

/*Second connection*/
?>

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    是的,你可以,我也使用了显式连接而不是隐式连接。因为我认为这是最佳做法。

    SELECT * FROM product p
    INNER JOIN product_description pd ON pd.product_id = p.product_id
    INNER JOIN product_to_category ptc ON ptc.product_id = p.product_id
    INNER JOIN category_description cd ON cd.category_id = ptc.category_id
    WHERE pd.language_id = 2
    

    【讨论】:

    • pd、ptc、cd是什么意思?
    • 这些被称为表名的别名。
    • 哦,好吧,我的回显码有什么变化吗?我如何回显类别的名称和产品方的名称它们都有行“名称”
    • 在您的选择中:SELECT cd.name as category_name, p.name as product_name FROM ..... 然后在您的回声中:echo $product['category_name'];echo $product['product_name'];
    • 谢谢你的帮助,你能把我链接到可以阅读更多这些东西的地方吗?
    【解决方案2】:

    要连接所有 4 个表,查询如下:

    SELECT * FROM product p
    JOIN product_description pd ON p.product_id = pd.product_id
    JOIN product_to_category pc ON p.product_id = pc.product_id
    JOIN category_description cd ON pc.category_id = cd.category_id
    WHERE pd.language_id = 2
    

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2011-12-27
      相关资源
      最近更新 更多