Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > ต้องการให้แสดงหมวดหมู่ ที่มีสินค้าทั้งหมดอยู่ในแต่ละหมวดหมู่ และสินค้าบางตัวอยู่หลายหมวดหมู่ด้วย



 

ต้องการให้แสดงหมวดหมู่ ที่มีสินค้าทั้งหมดอยู่ในแต่ละหมวดหมู่ และสินค้าบางตัวอยู่หลายหมวดหมู่ด้วย

 



Topic : 136943



โพสกระทู้ ( 66 )
บทความ ( 0 )



สถานะออฟไลน์




ตอนนี้แสดงหมวดหมู่ซ้ำ จะเขียนอย่างไรให้แสดงหมวดหมู่และมีรายการสินค้าอยู่ในหมวดหมู่นั้น และปัญหาอีกอย่างคือสินค้าบางตัวใช้ร่วมกันในหลายหมวดหมู่ค่ะ
Code (PHP)
<?php
$conn = mysqli_connect('localhost', 'root', '', 'ko');

// เตรียมแบบสอบถาม
$sql = "SELECT products.product_name, categories.category_name
        FROM products
        INNER JOIN product_categories ON products.product_id = product_categories.product_id
        INNER JOIN categories ON categories.category_id = product_categories.category_id";

// ดำเนินการค้นหา
$result = mysqli_query($conn, $sql);

// ตรวจสอบว่าแบบสอบถามส่งคืนแถว
if (mysqli_num_rows($result) > 0) {
    // สร้างอาร์เรย์เพื่อเก็บผลลัพธ์
    $products = [];

    // ดึงผลลัพธ์เป็นอาร์เรย์
    while ($row = mysqli_fetch_assoc($result)) {
        // ตรวจสอบว่าผลิตภัณฑ์มีอยู่แล้วในอาร์เรย์หรือไม่
        if (!array_key_exists($row['product_name'], $products)) {
            // หากไม่มี ให้สร้างรายการใหม่ในอาร์เรย์สำหรับผลิตภัณฑ์
            $products[$row['product_name']] = [];
        }
        // เพิ่มหมวดหมู่ให้กับอาร์เรย์ของหมวดหมู่ผลิตภัณฑ์
        $products[$row['product_name']][] = $row['category_name'];
    }

    // วนซ้ำตามอาร์เรย์ของผลิตภัณฑ์และหมวดหมู่
    foreach ($products as $product_name => $categories) {
        
        echo "Categories: " . implode(", ", $categories) . "<br>";
		echo "Product Name: " . $product_name . "<br><br>";
    }
} else {
    echo "No products found";
}

mysqli_close($conn);
?>


ีunoeu
pppe



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2023-02-03 15:37:24 By : Vipada147 View : 361 Reply : 12
 

 
ลองเปลี่ยนจาก M:N เป็น 1:N






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-03 16:07:59 By : 009
 


 

No. 2



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



สถานะออฟไลน์
Facebook Blogger

ลองใช้ Array เก็บข้อมูลแล้ววนลูปเทียน key ดูครับ เมื่อไอดีตรงก็นำมาแสดง
http://blog.phpcodemania.com/2017/11/php-mysql-product-category-design.html
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-06 10:10:43 By : {Cyberman}
 

 
ตอบความคิดเห็นที่ : 1 เขียนโดย : 009 เมื่อวันที่ 2023-02-03 16:07:59
รายละเอียดของการตอบ ::
M:N ถูกแล้วนะ ขออภัย


ตัวอย่าง

Schema (SQL)
CREATE TABLE products (
  product_id INT PRIMARY KEY AUTO_INCREMENT,
  product_name VARCHAR(50) NOT NULL,
  product_description TEXT,
  product_price DECIMAL(10,2) NOT NULL
);

CREATE TABLE categories (
  category_id INT PRIMARY KEY AUTO_INCREMENT,
  category_name VARCHAR(50) NOT NULL
);

CREATE TABLE product_category (
  product_id INT NOT NULL,
  category_id INT NOT NULL,
  PRIMARY KEY (product_id, category_id),
  FOREIGN KEY (product_id) REFERENCES products(product_id),
  FOREIGN KEY (category_id) REFERENCES categories(category_id)
);

INSERT INTO products (product_name, product_description, product_price)
VALUES ('Product A', 'This is a description for product A', 19.99),
       ('Product B', 'This is a description for product B', 29.99),
       ('Product C', 'This is a description for product C', 39.99);

INSERT INTO categories (category_name)
VALUES ('Category X'), ('Category Y'), ('Category Z');

INSERT INTO product_category (product_id, category_id)
VALUES (1, 1), (1, 2), (2, 2), (3, 3);



Query (SQL)
SELECT 
  categories.category_name AS categories, 
  GROUP_CONCAT(products.product_name) AS products 
FROM 
  products 
  RIGHT JOIN product_category ON products.product_id = product_category.product_id 
  RIGHT JOIN categories ON product_category.category_id = categories.category_id 
GROUP BY 
  categories;



result

res
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-06 18:02:23 By : 009
 


 

No. 4



โพสกระทู้ ( 66 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณทุกท่านที่แนะนำ จะนำไปปรับปรุงดูค่ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-06 18:20:00 By : Vipada147
 


 

No. 5



โพสกระทู้ ( 2,249 )
บทความ ( 5 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook Hi5 Blogger

มาถูกทางแล้วนะครับ ติดเรื่อง query ตอนแสดงผล ต้องคำนึงเรื่องตารางหลัก ตารางรอง LEFT JOIN , RIGHT JOIN ศึกษาดูครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-06 22:03:23 By : Manussawin
 


 

No. 6



โพสกระทู้ ( 9,544 )
บทความ ( 2 )



สถานะออฟไลน์


ไม่แนะนำให้ใช้ สินค้า 1 อย่าง มีหลายหมวดหมู่ครับ ลองยกตัวอย่าง สินค้าที่มีหลายหมวดหมู่ได้ไหมครับ
ตั้งแต่ทำ stock มา ยังไม่เคยเจอแบบนี้เลย เพราะมันมีผลต่อการแสดงสถิตการขายกับยอดขายรวม
เดี๋ยวจะงง ยอยขายรวมทั้งหมด กับยอดขายรวมจากยอดรวมแต่ละหมวดหมู่มันไม่เท่ากันเอานะครับ
มันจะผิดหลักบัญชีมีการบวกยอดที่ซ้ำซ้อนกัน จะไม่ผ่านผู้ตรวจสอบบัญชีเอานะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-07 06:51:14 By : Chaidhanan
 


 

No. 7



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



สถานะออฟไลน์
Facebook Blogger

ผมคิดว่าที่ใช้หลายหมวดหมู่ น่าจะเพิ่มโอกาสการค้นหาและแสดงผลได้มากขึ้นสำหรับผู้ใช้งานนะครับ

เช่น พวกเว็บขายรูปภาพ จะมีการจัดว่าภาพนั้นๆ อยู่ในหมวดหมู่อะไรบ้าง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-07 08:42:59 By : {Cyberman}
 


 
ผมก็ไม่เคยเห็นสินค้าในหลายหมวด(หมายถึงหมวดหมู่หลัก level เดียวกัน)
แต่จะเห็นทำเป็นหลายหมวดหมู่ในกรณีต่าง level คือ sub-category, sub-sub-cat, ...
หรือทำเป็น attribute หรือ tag เพื่อความสะดวกในการค้นหา ซึ่งมักจะพบใน eCommerce

เช่น

Category: Computer
Sub-category: Laptop
Sub-sub-category: Gaming Laptops
Attribute/Tag : Mall
Product: ALIENWARE M17 R5-W569317003ATH

นี่คือตัวอย่างสินค้าที่อยู่ในหลายหมวดหมู่ แต่ไม่ปะปนกัน นำไปสรุปรายงานได้ง่าย
และสะดวกต่อการค้นหา (จริงหรือไม่)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-07 10:22:56 By : 009
 


 

No. 9



โพสกระทู้ ( 66 )
บทความ ( 0 )



สถานะออฟไลน์


วัตถุประสงค์ของโปรเจคนี้คือ เป็นการผลิตค่ะ สินค้า 1 อย่างใช้กับการผลิตหลายผลิตภัณฑ์ค่ะ
ต้องการออกรายงานการเบิกสินค้า เข้าสู่สายการผลิตค่ะ


ประวัติการแก้ไข
2023-02-07 10:29:10
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-07 10:25:37 By : Vipada147
 


 

No. 10



โพสกระทู้ ( 9,544 )
บทความ ( 2 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 9 เขียนโดย : Vipada147 เมื่อวันที่ 2023-02-07 10:25:37
รายละเอียดของการตอบ ::
ขอบคุณครับ ลืม วัตถุดิบการผลิด

ตอบความคิดเห็นที่ : 7 เขียนโดย : {Cyberman} เมื่อวันที่ 2023-02-07 08:42:59
รายละเอียดของการตอบ ::
ขอบคุณครับ เพื่อค้นหาง่าย ก็เป็นเหตุผลที่ดีครับ ผมก็ไปมองแค่การสรุปรายงานการขายด้านบัญชีอย่างเดียว

ตอบความคิดเห็นที่ : 8 เขียนโดย : 009 เมื่อวันที่ 2023-02-07 10:22:56
รายละเอียดของการตอบ ::
ขอบคูณครับ อันนี้ถือว่าไม่ซ้ำซ้อนเพราะแยกเป็น sub section

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-07 18:18:55 By : Chaidhanan
 


 

No. 11



โพสกระทู้ ( 4,706 )
บทความ ( 8 )



สถานะออฟไลน์


ทำให้มันรองรับได้หลายหมวดหมู่ไว้ก่อนผมว่าดีกว่า
ในส่วนการใช้งานจริง ถ้าจะบังคับให้แค่หมวดหมู่เดียวก็ให้เป็นเรื่องนโยบายไป แล้วก็อาจมีทำเป็นการตั้งค่าเพื่อให้ JS หน้า admin นั้นๆทำงานว่าติ๊กเลือกได้อันเดียว

หรือ
ให้มันมีหมวดหมู่แบบ primary, secondary ไป ซึ่งอันไหนเลือกก่อนก็เอาอันนั้นเป็นหลัก แล้วเวลาต้องทำรายงานออกมาอะไรที่ต้องมีแค่หมวดเดียว ก็เลือกจาก primary ไปเลยครับ


ประวัติการแก้ไข
2023-02-08 00:40:23
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-08 00:38:41 By : mr.v
 


 

No. 12



โพสกระทู้ ( 66 )
บทความ ( 0 )



สถานะออฟไลน์


ได้แล้วค่ะ ขอบคุณทุกท่านที่แนะนำให้จนสำเร็จค่ะ
Code (PHP)
<html>
  <head>
    <title>Select Category</title>
  </head>
  <body>
    <form action="category_products.php" method="post">
      <select name="category_id">
        <?php
        $servername = "localhost";
        $username = "root";
        $password = "";
        $dbname = "ko";
        $conn = mysqli_connect($servername, $username, $password, $dbname);
        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
        }

        $sql = "SELECT category_id, category_name FROM categories";
        $result = mysqli_query($conn, $sql);

        if (mysqli_num_rows($result) > 0) {
            // ส่งออก แต่ละแถว
            while($row = mysqli_fetch_assoc($result)) {
                echo '<option value="'.$row["category_id"].'">'.$row["category_name"].'</option>';
            }
        } else {
            echo "0 results";
        }

        mysqli_close($conn);
        ?>
      </select>
      <input type="submit" value="Submit">
    </form>
  </body>
</html>


File category_products.php
Code (PHP)
<!DOCTYPE html>
<html>
<head>
    <title>Category Products</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head>
<body>
    <div class="container">
        <?php
        $servername = "localhost";
        $username = "root";
        $password = "";
        $dbname = "ko";

        $conn = mysqli_connect($servername, $username, $password, $dbname);

        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
        }

        $category_id = $_POST["category_id"];

        $sql = "SELECT categories.category_name
        FROM categories
        WHERE categories.category_id = $category_id";
        $result = mysqli_query($conn, $sql);

        if (mysqli_num_rows($result) > 0) {
            $row = mysqli_fetch_assoc($result);
            $category_name = $row["category_name"];
        } else {
            echo "0 results";
        }

        $sql = "SELECT products.product_name, products.product_image
        FROM products
        JOIN product_categories ON products.product_id = product_categories.product_id
        WHERE product_categories.category_id = $category_id
        ORDER BY products.product_name";
        $result = mysqli_query($conn, $sql);

        if (mysqli_num_rows($result) > 0) {
            echo "<h1 class='text-center mt-5'>Products in category '$category_name'</h1>";
            echo "<div class='row mt-5'>";
            $count = 1;
            // ส่งออกข้อมูลในแต่ละแถว
            while($row = mysqli_fetch_assoc($result)) {
                echo "<div class='col-md-4'>";
                echo "<p class='text-center mt-3'>".$count.". ".$row["product_name"]."</p>";
                echo "<div class='d-flex justify-content-center'>";			
				echo "<img src='".$row["product_image"]."' alt='".$row["product_name"]."' class='img-thumbnail' width='100'>";
                echo "</div>";
                echo "</div>";
                $count++;
            }
            echo "</div>";
        } else {
            echo "<h1 class='text-center mt-5'>No products found in category '$category_name'</h1>";
        }

        mysqli_close($conn);
		?>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-02-09 17:21:18 By : Vipada147
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ต้องการให้แสดงหมวดหมู่ ที่มีสินค้าทั้งหมดอยู่ในแต่ละหมวดหมู่ และสินค้าบางตัวอยู่หลายหมวดหมู่ด้วย
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่