猿问

PHP mySQL JOIN 和显示(3 个表)

我是 php 的新手,我的研究项目试图解决一些挑战


我有 3 个表“产品”、“类别”、“product_to_categories”


产品表:


product_id    product_name    product_price    product_img    product_link    date

1             item1_name      item1_price      item1_img      item1_link      item1_date

2             item2_name      item2_price      item2_img      item2_link      item2_date

类别表:


category_id    category_name    

1              category1_name      

2              category2_name     

3              category3_name     

和 product_to_categories 表:


relation_id    product_id    category_id    

1              product1_id   category1_id     

2              product1_id   category2_id      

3              product2_id   category1_id  

4              product2_id   category3_id  

我想得到两件事:

  1. 写下所有产品的列表以及它们所属的所有类别名称(无 ID)。

  2. 仅列出属于给定类别的产品

不幸的是,我不知道如何处理这个问题。

show_products.php:

<?php

$per_page=100;


    if(isset($_GET['page'])){

        $page = $_GET['page'];

    }else{

        $page=1;

    }

    $start_from = ($page-1) * $per_page;


    $get_products = "SELECT * FROM products ORDER BY 1 DESC LIMIT $start_from,$per_page";


    $run_products = mysqli_query($conn,$get_products);


    while($row_products=mysqli_fetch_array($run_products)){


        $pro_id = $row_products['product_id'];

        $pro_name = $row_products['product_name'];

        $pro_price = $row_products['product_price'];

        $pro_img = $row_products['product_img'];

        $pro_link = $row_products['product_link'];

        $pro_date = $row_products['date'];


        echo "

         <tr>

            <td style='width: 70px'>$pro_id</td>

            <td><img src='../p_img/$pro_img' style='width:70px;'></td>

            <td>$pro_name</td>

            <td>ok. $pro_price zł</td>

            <td>$pro_link</td>

            <td></td>

            <td>$pro_date</td>

          </tr>

        ";

    }

?>


拉莫斯之舞
浏览 177回答 2
2回答

婷婷同学_

这实际上是关于 SQL 语言和学习如何使用它的。希望您的数据库有一个 GUI,例如 PhpMyAdmin 或 HeidiSQL,因为在编写 SQL 代码时通常更容易使用它。假设您有这些表:CREATE TABLE products(&nbsp; &nbsp; product_id int PRIMARY KEY,&nbsp; &nbsp; product_name varChar(255)&nbsp; &nbsp;);CREATE TABLE categories(&nbsp; &nbsp; category_id int PRIMARY KEY,&nbsp; &nbsp; category_name varChar(255));CREATE TABLE product_to_categories(&nbsp; &nbsp; product_id int,&nbsp; &nbsp; category_id int,&nbsp; &nbsp;FOREIGN KEY (product_id) REFERENCES products(product_id),&nbsp; &nbsp;FOREIGN KEY (category_id) REFERENCES categories(category_id));使用此示例数据:INSERT INTO products VALUES (1, 'Product 1'), (2, 'Product 2');INSERT INTO categories VALUES (1, 'Category 1'), (2, 'Category 2');INSERT INTO product_to_categories VALUES (1,1), (2,1), (2,2);您可以使用此长格式查询来获取数据:SELECT&nbsp; &nbsp; P.*,&nbsp; &nbsp; C.category_nameFROM&nbsp; &nbsp; products PJOIN&nbsp;&nbsp; &nbsp; product_to_categories PC&nbsp; &nbsp; ON&nbsp; &nbsp; P.product_id = PC.product_idJOIN&nbsp; &nbsp; categories C&nbsp; &nbsp; ON&nbsp; &nbsp; PC.category_id = C.category_id哪个返回1&nbsp; &nbsp;Product 1&nbsp; &nbsp;Category 12&nbsp; &nbsp;Product 2&nbsp; &nbsp;Category 12&nbsp; &nbsp;Product 2&nbsp; &nbsp;Category 2但是,因为您在连接表中使用相同的列名,您还可以使用该NATURAL JOIN命令生成相同的列名SELECT&nbsp; &nbsp; P.*,&nbsp; &nbsp; C.category_nameFROM&nbsp; &nbsp; products PNATURAL JOIN&nbsp; &nbsp; categories CNATURAL JOIN&nbsp; &nbsp; product_to_categories要从单个类别中获取产品,您可以使用:SELECT&nbsp; &nbsp; *FROM&nbsp; &nbsp; products PNATURAL JOIN&nbsp; &nbsp; product_to_categories PCWHERE&nbsp; &nbsp; PC.category_id = 2返回2&nbsp; &nbsp;Product 2&nbsp; &nbsp;2

杨魅力

对于第一个问题:您应该使用JOIN 子句才能通过产品 ID 将产品与类别相关联:SELECT    p.product_name,    c.category_name,FROM    products pJOIN    products_categories pc ON p.product_id = pc.product_idJOIN    categories c ON pc.category_id = c.category_id对于第二个问题:当你关联两个表时,你可以通过在连接中添加一个 where 子句来过滤你正在连接的表的结果:SELECT    p.product_nameFROM    products pJOIN    products_categories pc ON p.product_id = pc.product_id AND pc.category_id = 1
随时随地看视频慕课网APP
我要回答