[英]PHP mySQL JOIN and display (3 tables)
嗨,我是 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
我试图得到两件事:
不幸的是,我不知道如何解决这个问题。
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> "; }?>
这真的是关于 SQL 语言和学习如何使用它。 希望您的数据库有一个 GUI,例如 PhpMyAdmin 或 HeidiSQL,因为在编写 SQL 代码时使用它通常更容易。
假设您有这些表:
CREATE TABLE products
(
product_id int PRIMARY KEY,
product_name varChar(255)
);
CREATE TABLE categories
(
category_id int PRIMARY KEY,
category_name varChar(255)
);
CREATE TABLE product_to_categories
(
product_id int,
category_id int,
FOREIGN KEY (product_id) REFERENCES products(product_id),
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
P.*,
C.category_name
FROM
products P
JOIN
product_to_categories PC
ON
P.product_id = PC.product_id
JOIN
categories C
ON
PC.category_id = C.category_id
哪个返回
1 Product 1 Category 1
2 Product 2 Category 1
2 Product 2 Category 2
但是,因为您在连接表中使用相同的列名,所以您也可以使用NATURAL JOIN
命令来生成相同的列名
SELECT
P.*,
C.category_name
FROM
products P
NATURAL JOIN
categories C
NATURAL JOIN
product_to_categories
要从单个类别中获取产品,您可以使用:
SELECT
*
FROM
products P
NATURAL JOIN
product_to_categories PC
WHERE
PC.category_id = 2
返回
2 Product 2 2
对于第一个问题:您应该使用JOIN 子句,以便能够通过其 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.