Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP mySQL连接和显示(3个表)_Php_Mysql - Fatal编程技术网

PHP mySQL连接和显示(3个表)

PHP mySQL连接和显示(3个表),php,mysql,Php,Mysql,嗨,我是php新手,我的研究项目试图解决一些挑战 我有3个表格“产品”、“类别”、“产品类别” 产品表: 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

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

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

产品表:

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     
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  
和产品类别表:

category_id    category_name    
1              category1_name      
2              category2_name     
3              category3_name     
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  
我试图得到两样东西:

  • 写下所有产品的列表,以及它们所属的所有类别名称(并没有ID)
  • 仅列出属于给定类别的产品
  • 不幸的是,我不知道如何处理这个问题

    show_products.php:


    这实际上是关于SQL语言以及如何使用它的。希望您的数据库有一个GUI,比如PhpMyAdmin或HeidiSQL,因为在编写SQL代码时使用它通常更容易

    假设您有以下表格:

    创建表格产品
    (
    产品id int主键,
    产品名称varChar(255)
    );
    创建表类别
    (
    类别id int主键,
    类别名称varChar(255)
    );
    创建表产品到类别
    (
    产品id int,
    类别id int,
    外键(产品id)引用产品(产品id),
    外键(类别id)引用类别(类别id)
    );
    
    使用此示例数据:

    插入产品值(1,‘产品1’,(2,‘产品2’);
    在类别中插入值(1,‘类别1’,(2,‘类别2’);
    在产品类别中插入值(1,1)、(2,1)、(2,2);
    
    您可以使用此长表单查询获取数据:

    选择
    第页*,
    C.类别名称
    从…起
    产品P
    参加
    产品类别PC
    在…上
    P.product\U id=PC.product\U id
    参加
    C类
    在…上
    PC.category\u id=C.category\u id
    
    返回

    1   Product 1   Category 1
    2   Product 2   Category 1
    2   Product 2   Category 2
    
    2   Product 2   2
    
    但是,由于在联接表中使用相同的列名,因此也可以使用
    NATURAL join
    命令生成相同的列名

    选择
    第页*,
    C.类别名称
    从…起
    产品P
    自然连接
    C类
    自然连接
    产品类别
    
    要从单个类别获得产品,您可以使用:

    选择
    *
    从…起
    产品P
    自然连接
    产品类别PC
    哪里
    PC.category_id=2
    
    返回

    1   Product 1   Category 1
    2   Product 2   Category 1
    2   Product 2   Category 2
    
    2   Product 2   2
    

    对于第一个问题:您应该使用,以便能够通过其id将产品与类别关联:

    SELECT
        p.product_name,
        c.category_name,
    FROM
        products p
    JOIN
        products_categories pc ON p.product_id = pc.product_id
    JOIN
        categories c ON pc.category_id = c.category_id
    
    对于第二个问题:当关联两个表时,可以通过在联接中添加where子句来过滤要联接的表的结果:

    SELECT
        p.product_name
    FROM
        products p
    JOIN
        products_categories pc ON p.product_id = pc.product_id AND pc.category_id = 1
    

    您在问题标题中陈述的最佳方法是:使用
    JOIN
    。字段的名称甚至允许MySQLs
    自然连接
    ,这是连接表的最简单方法。这是非常类似问题的解决方案=>非常感谢!如果我能再问你一件事。是否有任何SQL运算符可以合并结果?我的意思是,它将显示:“1产品1类别1(新行)2产品2类别1,类别2”,除了“1产品1类别1(新行)2产品2类别1(新行)2产品2类别2(新行)”或者我应该在前端做吗?@Elijah,我不确定我是否理解你的问题。最好在这个网站上问一个新问题,在那里你可以格式化你希望得到的东西。你可以参考这个问题,这将有助于一些背景的人。