Wed 23 Jan 2008 23:35:34
คือมันจะต้องคำนวนยอดขายรวมเป็นสัปดาห์ เดือน ปี นะครับ ต้องเขียนโค้ด sql ลักษณะไหนหรือครับ ผมเก็บเวลาเป็นประเภท datetime นะครับ
แล้วถ้าต้องการให้รายงานวันที่เท่านี้ ถึงวันที่เท่านี้จะให้มันคำนวนวันที่อย่างไรครับ
Thu 7 Feb 2008 23:50:15
คือผมลองใช่โค้ดแบบนี้ดูอะครับ
$sql = "SELECT SUM(SalePrice) FROM order_detail where SaleTime like '%$year-01%' GROUP BY SaleTime like '%$year-01%';";
มันแสดงรายงานออกมาได้ แต่จริงๆ แล้วตรง 01 คือเดือน 1 ผมต้องการใส่ตัวแปรที่รับค่ามาอีกหน้านึง แต่พอผมใช้โค้ด แบบนี้แล้วมันไม่ผ่านอะครับ $sql = "SELECT SUM(SalePrice) FROM order_detail where SaleTime like '%$year-$month%' GROUP BY SaleTime like '%$year-$month%';"; ต้องแก้ยังไงหรอครับ
Fri 8 Feb 2008 14:04:00
ถ้าคุณเก็บข้อมูลเป็น date, datetime, timestamp จะสามารถใช้ datetime function ได้เลยครับ เช่นในกรณีนี้ถ้าอยากได้ปีและเดือน ก็อาจจะใช้ WHERE YEAR(SaleTime)=2008 AND MONTH(SaleTime)=1 ส่วน GROUP BY ก็สามารถใช้ function ต่างๆนี้ได้เช่นกันครับ
ใน GROUP BY ไม่มีการใช้ conparison นะครับดังนั้นการใส่ like หรือ = จึงไม่สามารถทำได้
Fri 8 Feb 2008 14:31:56
ผมพึ่งแก้ได้เมื่อกี้เลย คือตัวแปร $month มันดันส่งค่า 1 ไม่ใช่ 01 เลยไม่ได้ซักที แต่ของคุณมากครับที่แนะนำตรง where กับ group by งั้นผมก็ทำแบบนี้ได้ใช่ปะครับ WHERE YEAR(SaleTime)=$year AND MONTH(SaleTime)=$month
แต่มีอีกปัญหานึงครับ ต้องการรวมยอดขายเป็นสัปดาห์ มันมีวันที่ 01 ถึง 07 แต่นี้จะโค้ด sql ยังไงอะครับให้ ถ้าเป็นเดือนที่ 1 มันเลือกตัวแปร 01 ได้ แต่ว่าาเลือกสัปดาห์ที่ 1 จะให้มันรู้ไงว่าเราจะเอาตัวแปรวัน 01 ถึง 07 แล้วเอาค่ามารวมกัน
Fri 8 Feb 2008 20:08:10
2. การรวมผลเป็นรายสัปดาห์ก็สามารถใช้ function ได้ครับ เช่น SELECT SUM(....), WEEKOFYEAR(SaleTime) AS woy FROM.... WHERE ..... GROUP BY woy จะได้รายการรวมเป็นรายสัปดาห์ประมาณ 52-53 record แล้วก็มาเลือกเอาข้อมูลช่วงที่ต้องการอีกทีครับ
Mon 11 Feb 2008 13:11:19
ถ้าเป็นวันนี่ใช้ยังไงครับ ผมลองไม่ถูกซักตัว date() หรือ day() หรือ mday() วันที่ที่เป็นตัวเลขนะครับ เช่น 01, 02, 03
Mon 11 Feb 2008 17:11:05
DAY(NOW()), DAYOFMONTH(NOW())
หรือถ้าต้อง leading zero ด้วยต้องใช้
DATE_FORMAT('%d', NOW())
Tue 12 Feb 2008 01:16:11
ไม่ใช่ครับ คือจะเอาตัวแปลที่รับค่ามาใส่ใน WHERE YEAR(SaleTime)=$year AND MONTH(SaleTime)=$month ลักษณะนี้นะครับ แต่ว่าตรงวันทีมันไม่ได้ซักทีครับ ลอง date(SaleTime) day(SaleTime) mady(SaleTime) ก็ไม่ถูกอะครับ
Tue 12 Feb 2008 14:03:14
Tue 12 Feb 2008 17:43:38
ตกลงผมใช่ DAY() ครับ ตอนแรกไม่รู้ทำไมทำเท่าไหร่ก็ error แต่ลองทำใหม่แต่แรก ตอนนนี้ได้แล้วครับ ของคุณครับ
Wed 13 Feb 2008 19:05:21
แล้วถ้าต้องการหา Product ที่วันสินค้าเข้าน้อยกว่าวันปัจจุบัน 3 เดือน แบบนี้ต้องเขียนโค้ดตรงเวลาแบบไหนครับ
Thu 14 Feb 2008 02:25:00
SELECT..... WHERE SaleTime => DATE_SUB(NOW(), INTERVAL 3 MONTH) AND SaleTime <= NOW()
หรืออาจจะใช้
SELECT .... WHERE SaleTime BETWEEN DATE_SUB(NOW(), INTERVAL 3 MONTH) AND NOW()
แต่การใช้ BETWEEN จะมีปัญหาในการ CAST จาก date, datetime, timestamp, time ถ้าข้อมูลไม่เป็นชนิดเดียวกันจริงๆจะต้องทำการ CAST() ให้เป็นชนิดเดียวกันจริงๆ ไม่เช่นนั้นอาจจะเกิดปัญหาในการคำนวนได้ครับ
การใช้ built-in function ของ mysql ต้องอ่าน document ของเขาเยอะๆครับ จะช่วยให้การเขียน query ได้มีประสิทธิภาพมากขึ้น และจะทำให้เราเขียนตาม Syntax ที่ถูกต้องด้วยครับ
Thu 14 Feb 2008 03:45:36
ขออีกนิดครับ คือว่าข้อมูลที่ต้องการคือหลังจาก 90 วันขึ้นไปนะครับ ไม่ใช่ระหว่างวันนี้ถึง90วันหลังจากนี้ ผมลองแล้วลองอีกก็ไม่ได้
Thu 14 Feb 2008 10:02:32
Thu 14 Feb 2008 15:21:33
ได้แล้วครับ ผมงงเองแหละ ขอบคุณมากครับ

















