php&mysql ขอคำแนะนำ ต้องการหา ค่า $id = 3 จากตาราง ที่มีค่าเป็น array
Code (PHP)
CREATE TABLE IF NOT EXISTS `orders` (
`OrderId` int(5) NOT NULL,
`ProductID` varchar(100) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Dumping data for table `orders`
--
INSERT INTO `orders` (`OrderId`, `ProductID`) VALUES
(1, '1,2,4'),
(2, '1,3,4'),
(3, '1,2,3,4'),
(4, '2,4'),
(5, '1,4');
ALTER TABLE `orders`
ADD PRIMARY KEY (`OrderId`);
CREATE TABLE IF NOT EXISTS `product` (
`ProductID` int(4) NOT NULL,
`ProductName` varchar(100) NOT NULL,
`Price` double NOT NULL,
`Picture` varchar(100) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
--
-- Dumping data for table `product`
--
INSERT INTO `product` (`ProductID`, `ProductName`, `Price`, `Picture`) VALUES
(1, 'Product 1', 100, '1.gif'),
(2, 'Product 2', 200, '2.gif'),
(3, 'Product 3', 300, '3.gif'),
(4, 'Product 4', 400, '4.gif');
ALTER TABLE `product`
ADD PRIMARY KEY (`ProductID`);
////////////////////////////
// จากตาราง order
// ต้องการทราบว่า สินค้าตัวที่ 3 มีอยู่ใน order ใดบ้าง
// ลองใช้คำสั่ง mysql
$id=3;
SELECT * FROM orders WHERE ProductID=$id;
// ผลไม่ออก ลองใช้คำสั่ง
SELECT * FROM orders WHERE ProductID IN($id);
// ผลไม่ออก เหมือนกัน
// รบกวนช่วยแนะนำด้วยคะ
Tag : PHP, MySQL
Date :
2017-07-07 20:58:44
By :
gju
View :
768
Reply :
4
วิธีการเก็บ product id มันผิด ที่เหลือก็ผิดหมด
Date :
2017-07-07 21:58:44
By :
mr.v
หมายถึง
เราเก็บข้อมูล ในแต่ละ order มีสินค้า โดยบันทึกเป็น id ของสินค้า จากตาราง product มี ProductID เป็น int
จากความคิดเห็นของคุณ หมายถึง
ในตาราง orders มี field ProductID เป็น varchar ตรงนี้ผิดใช่ไม๊คะ ดังนั้นควรเปลี่ยนเป็น int หรือเปล่าคะ หรือควรแก้ไขอย่างไรคะ
Date :
2017-07-07 22:10:57
By :
gju
Code (SQL)
select * from `orders` where concat(',',ProductID,',') like '%,3,%'
แต่เปลี่ยน วิธีเก็บ ก็จะทำงานสดวกขึ้น แบบนี้เวลาจะลบ จะอัพเดทอะไรมันนัวกันไปหมด
เวลานำมาจอยกัน
Code (SQL)
select * from `orders` left join product on concat(',',`orders`.ProductID,',') like concat( '%,',product.id,',%')
ประวัติการแก้ไข 2017-07-08 11:11:24
Date :
2017-07-08 11:05:58
By :
Chaidhanan
ควรเก็บในรูปแบบที่มันเป็นตารางมีความสัมพันธ์กันจะดีกว่า จัดการก็ง่ายอะไรก็ง่าย ไวด้วย
อย่างเช่น 1 order มีได้หลาย product id ก็ออกแบบตาราง order ก่อน เก็บ order id ไว้
แล้วออกแบบตาราง order_product ในนั้นก็มี primary key ของตัวเอง มี order id และ product id ซึ่งเพิ่มสินค้าอะไรกี่ชิ้นตอนสั่งซื้อก็ยัดลงในตารางนี้แล้วลิ้งค์ order id ให้ตรงกันแต่ละ order ก็เรียบร้อย
ลองหาตัวอย่างเว็บต่างๆมาดูที่เขาแจกฟรีมีเยอะแยะ เอามาศึกษาการออกแบบฐานข้อมูล
Date :
2017-07-08 23:35:41
By :
mr.v
Load balance : Server 00