 |
ขอแนวคิดเรื่อง sql การ query หน่อย ครับ ว่ามีทางที่ดีกว่านี้หรือป่าว |
|
 |
|
|
 |
 |
|
สินค้า
Code (SQL)
CREATE TABLE IF NOT EXISTS `product` (
`product_id` int(10) NOT NULL AUTO_INCREMENT,
`cate_id` varchar(10) NOT NULL,
`product_name` varchar(50) NOT NULL,
`product_detail` varchar(100) NOT NULL,
`product_total` int(5) NOT NULL,
`product_size` varchar(100) NOT NULL,
`product_price` decimal(10,2) NOT NULL,
`product_date` date NOT NULL,
`product_pic` varchar(50) NOT NULL,
PRIMARY KEY (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=46 ;
รายละเอียดการสั่งซื้อ
Code (SQL)
CREATE TABLE IF NOT EXISTS `order_detail` (
`order_detail_id` int(10) NOT NULL AUTO_INCREMENT,
`order_id` varchar(10) NOT NULL,
`product_id` varchar(10) NOT NULL,
`amount` int(3) NOT NULL,
`size` varchar(10) NOT NULL,
PRIMARY KEY (`order_detail_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=29 ;
การสั่งซื้อ
Code (SQL)
CREATE TABLE IF NOT EXISTS `order` (
`order_id` varchar(10) NOT NULL,
`pay_status` varchar(10) NOT NULL,
`tran_status` varchar(2) NOT NULL,
`cus_id` varchar(10) NOT NULL,
`order_date` date NOT NULL,
`order_know` varchar(1) NOT NULL,
`order_summary` decimal(10,2) NOT NULL,
PRIMARY KEY (`order_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
คือผมต้องการหา สินค้าขายดีที่สุดของทุกเดือนครับ เลยเขียนออกมาดังนี้
Code (SQL)
SELECT product_id,order_date , sum( b.amount ) AS sum_total FROM `order` a INNER JOIN `order_detail` b ON a.order_id = b.order_id WHERE order_date LIKE '$yy-$mm-%' GROUP BY b.product_id ORDER BY sum_total desc
แต่คำสั่งคิวรี่ออกมาแค่ รหัสสินค้า คือผมอยากจะเอารายละเอียดสินค้าพวกชื่อออกมาด้วย เลยเพิ่ม INNER JOIN `product` เข้าไปแต่ว่าผลมันผิด ผมอยากทราบวิธีการนำรายละเอียดสินค้าออกมาแสดงด้วย คิวรี่แค่รอบเดียว ว่าต้องเขียนยังไง หรือผมต้อง คิวรี่ 2 รอบอยู่ดี แล้วได้รหัสสินค้าออกมาแล้ว จะนำไปคิวรี่อีกรอบด้วยวิธีไหนดีและง่ายที่สุดครับผม
Tag : PHP, MySQL
|
|
 |
 |
 |
 |
Date :
2013-12-07 10:05:30 |
By :
thipin |
View :
1196 |
Reply :
9 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เพราะ Select มาแค่นนี่เลยไม่มีครับ
Code (SQL)
product_id,order_date , sum( b.amount ) AS sum_total
ลองเพิ่ม Field ที่ต้องการดูก็น่าจะได้ตามต้องการ
Code (SQL)
product_name,product_detail,product_total,product_size.........
|
 |
 |
 |
 |
Date :
2013-12-07 11:03:38 |
By :
Krungsri |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คือผมต้องการหา สินค้าขายดีที่สุดของทุกเดือนครับ เลยเขียนออกมาดังนี้
คำว่า "ขายดี" มันมีอยู่ 2 กรณี ดังนี้
1. ขายได้เป็นจำนวนมากฯ (นับ ชิ้น/ชุด/หน่วยนับ)
2. ขายได้เป็นจำนวนเงินมากฯ (นับ จำนวนเงินขายได้น้อยแต่ราคา/หน่วยนับ สูงมากฯ)
2.1 สิบปีขายได้แค่ ชิ้นเดียว แต่ราคาต่อชิ้น/หน่วยนับ >=1,000,000 บาท
|
 |
 |
 |
 |
Date :
2013-12-07 12:23:29 |
By :
love9713 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|

|
 |
 |
 |
 |
Date :
2013-12-08 18:24:14 |
By :
Krungsri |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|

|
 |
 |
 |
 |
Date :
2013-12-09 06:26:35 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
where ใช้ month(order_date) = 12 and year(order_date) = 2013 จะดีกว่า like ถ้าเพิ่มฟิลด์ด้วยก็ต้องเพิ่ม group by ด้วย แล้ว order_date select มาทำไมในเมื่อมันต้องระบุอยู่แล้วว่า report ของเดือนไหน ปีไหน
ส่วนด้านบนผมขอผ่าน สมองเบลอคิดตามไม่ทัน มันลึกซึ้งมาก 
|
 |
 |
 |
 |
Date :
2013-12-10 01:36:39 |
By :
PlaKriM |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|