ต้องการให้แสดงหมวดหมู่ ที่มีสินค้าทั้งหมดอยู่ในแต่ละหมวดหมู่ และสินค้าบางตัวอยู่หลายหมวดหมู่ด้วย
ลองเปลี่ยนจาก M:N เป็น 1:N
Date :
2023-02-03 16:07:59
By :
009
ตอบความคิดเห็นที่ : 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
Date :
2023-02-06 18:02:23
By :
009
ขอบคุณทุกท่านที่แนะนำ จะนำไปปรับปรุงดูค่ะ
Date :
2023-02-06 18:20:00
By :
Vipada147
มาถูกทางแล้วนะครับ ติดเรื่อง query ตอนแสดงผล ต้องคำนึงเรื่องตารางหลัก ตารางรอง LEFT JOIN , RIGHT JOIN ศึกษาดูครับ
Date :
2023-02-06 22:03:23
By :
Manussawin
ไม่แนะนำให้ใช้ สินค้า 1 อย่าง มีหลายหมวดหมู่ครับ ลองยกตัวอย่าง สินค้าที่มีหลายหมวดหมู่ได้ไหมครับ
ตั้งแต่ทำ stock มา ยังไม่เคยเจอแบบนี้เลย เพราะมันมีผลต่อการแสดงสถิตการขายกับยอดขายรวม
เดี๋ยวจะงง ยอยขายรวมทั้งหมด กับยอดขายรวมจากยอดรวมแต่ละหมวดหมู่มันไม่เท่ากันเอานะครับ
มันจะผิดหลักบัญชีมีการบวกยอดที่ซ้ำซ้อนกัน จะไม่ผ่านผู้ตรวจสอบบัญชีเอานะครับ
Date :
2023-02-07 06:51:14
By :
Chaidhanan
ผมคิดว่าที่ใช้หลายหมวดหมู่ น่าจะเพิ่มโอกาสการค้นหาและแสดงผลได้มากขึ้นสำหรับผู้ใช้งานนะครับ
เช่น พวกเว็บขายรูปภาพ จะมีการจัดว่าภาพนั้นๆ อยู่ในหมวดหมู่อะไรบ้าง
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
วัตถุประสงค์ของโปรเจคนี้คือ เป็นการผลิตค่ะ สินค้า 1 อย่างใช้กับการผลิตหลายผลิตภัณฑ์ค่ะ
ต้องการออกรายงานการเบิกสินค้า เข้าสู่สายการผลิตค่ะ
ประวัติการแก้ไข 2023-02-07 10:29:10
Date :
2023-02-07 10:25:37
By :
Vipada147
ทำให้มันรองรับได้หลายหมวดหมู่ไว้ก่อนผมว่าดีกว่า
ในส่วนการใช้งานจริง ถ้าจะบังคับให้แค่หมวดหมู่เดียวก็ให้เป็นเรื่องนโยบายไป แล้วก็อาจมีทำเป็นการตั้งค่าเพื่อให้ JS หน้า admin นั้นๆทำงานว่าติ๊กเลือกได้อันเดียว
หรือ
ให้มันมีหมวดหมู่แบบ primary, secondary ไป ซึ่งอันไหนเลือกก่อนก็เอาอันนั้นเป็นหลัก แล้วเวลาต้องทำรายงานออกมาอะไรที่ต้องมีแค่หมวดเดียว ก็เลือกจาก primary ไปเลยครับ
ประวัติการแก้ไข 2023-02-08 00:40:23
Date :
2023-02-08 00:38:41
By :
mr.v
ได้แล้วค่ะ ขอบคุณทุกท่านที่แนะนำให้จนสำเร็จค่ะ
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
Load balance : Server 03