亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP mySQL JOIN 和顯示(3 個表)

PHP mySQL JOIN 和顯示(3 個表)

PHP
拉莫斯之舞 2023-04-23 17:52:58
我是 php 的新手,我的研究項目試圖解決一些挑戰我有 3 個表“產品”、“類別”、“product_to_categories”產品表:product_id    product_name    product_price    product_img    product_link    date1             item1_name      item1_price      item1_img      item1_link      item1_date2             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  我想得到兩件事:寫下所有產品的列表以及它們所屬的所有類別名稱(無 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>        ";    }?>
查看完整描述

2 回答

?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

這實際上是關于 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


查看完整回答
反對 回復 2023-04-23
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

對于第一個問題:您應該使用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


查看完整回答
反對 回復 2023-04-23
  • 2 回答
  • 0 關注
  • 197 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號