|
|
|
ช่วยดู code นี้ให้หน่อยครับ ค้นหาแบบช่วง คือว่าต้องการให้มันแสดงข้อมูลแบบกำหนดช่วงของเดือน |
|
|
|
|
|
|
|
ลองเอา LIKE ออกดูสิครับ ไม่รู้ว่าถูกไหมนะครับ แต่ก็อยากช่วย เราไม่เก่งด้วยสิ ฮ่าๆ
อย่าไรก็ echo $strSQ ตัวนี้ออกมาดูก่อนนะครับ
$strSQL = "SELECT * FROM tb_show WHERE ( out_date BETWEEN '".$_GET["txtKeyword"]."' AND '".$_GET["txtKeyword2"]."' ) ";
|
|
|
|
|
Date :
2010-05-01 09:12:12 |
By :
chon2008 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่ได้อ่ะครับ
มันไม่ error แต่ข้อมูลมันไม่ออก
|
|
|
|
|
Date :
2010-05-01 11:17:50 |
By :
midobun |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SELECT *
FROM tb_show
WHERE CONCAT( MID( out_date , 1, 4 ) , MID( out_date , 6, 2 ) )
BETWEEN CONCAT( MID( '2010-03', 1, 4 ) , MID( '2010-03', 6, 2 ) )
AND CONCAT( MID( '2010-04', 1, 4 ) , MID( '2010-04', 6, 2 ) )
ใน Db เก็บรูปแบบวันที่เป็นแบบไหน ที่เราใช้อยู่เป็นรูปแบบ yyyy-mm-dd ตรงที่เป็น 1,4 และ 6,2 เปลี่ยนแปลงได้ขึ้นอยู่กับรูปแบบการเก็บวันที่ และตรงที่ 2010-30 เนี่ยก็ใส่ตัวแปรแทนเข้าไป
ปล. ที่เราใช้อยู่เนี่ยถ้านำวันที่มาเปรียบเทียบกัน จะใช้ concat เหมือนตัวอย่างน่ะ
|
|
|
|
|
Date :
2010-05-01 12:32:23 |
By :
a |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากเลยครับ ทำได้แล้ว
FROM tb_show
WHERE CONCAT( MID( out_date , 1, 4 ) , MID( out_date , 6, 2 ) )
BETWEEN CONCAT( MID( '".$_GET["txtKeyword"]."', 1, 4 ) , MID( '".$_GET["txtKeyword"]."', 6, 2 ) )
AND CONCAT( MID( '".$_GET["txtKeyword2"]."', 1, 4 ) , MID( '".$_GET["txtKeyword2"]."', 6, 2 ) ) ";
อยากทราบว่า CONCAT คืออะไรครับ แล้ว ตัวเลข 1,4 6,2 MID คืออะไรหรอครับ
อธิบายให้ฟังหน่อยนะครับ ขอบคุณครับ
|
|
|
|
|
Date :
2010-05-02 01:46:29 |
By :
midobun |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mid คือการตัด
concat คือการรวมสตริงเข้าด้วยกัน
แต่ไม่รู้ว่าถ้าเราเอามาใช้ในการเปรียบเทียบเนี่ย ไม่รู้ว่าจะมีข้อผิดพลาดตรงไหนหรือเปล่านะ แต่ที่ผ่านมายังไม่เจอปัญหา เพราะเมื่อ concat แล้วมันจะเป็น ชนิด string
อธิบาย code นะคะ
SELECT *
FROM tb_show
WHERE CONCAT( MID( out_date , 1, 4 ) , MID( out_date , 6, 2 ) )
BETWEEN CONCAT( MID( '2010-03', 1, 4 ) , MID( '2010-03', 6, 2 ) )
AND CONCAT( MID( '2010-04', 1, 4 ) , MID( '2010-04', 6, 2 ) )
บรรทัดนี้ CONCAT( MID( out_date , 1, 4 ) , MID( out_date , 6, 2 ) )
out_date เนี่ยมีรูปแบบเป็น yyyy-mm ใช่ไหม
MID( out_date , 1, 4 ) ก็คือ ตัด out_date ตั้งแต่ตัวที่1 จำนวน 4 ตัว เราจะได้ yyyy
MID( out_date , 6, 2 ) ก็คือ ตัด out_date ตั้งแต่ตัวที่6 จำนวน 2 ตัว เราจะได้ mm
(***ถ้า out_date มีรูปแบบเป็น mm-yyyy
MID( out_date , 4, 4 ) ก็คือ ตัด out_date ตั้งแต่ตัวที่4 จำนวน 4 ตัว เราจะได้ yyyy
MID( out_date , 1, 2 ) ก็คือ ตัด out_date ตั้งแต่ตัวที่1 จำนวน 2 ตัว เราจะได้ mm)
ถ้าแทนค่า out_date =2010-02
CONCAT( MID( out_date , 1, 4 ) , MID( out_date , 6, 2 ) ) เราก็จะได้ 201002
จากบรรทัดข้างบนเนี่ยเห็นแล้วใช่ไหมว่า เมื่อ concat แล้วมันก็จะได้ข้อมูลชุดหนึ่ง
ให้เรามองว่าเป็น จำนวน 201002
***การเปรียบก็คือ ไม่ว่ารูปแบบของวันที่ของเราจะเป็นยังไง
เราก็ต้องทำให้เป็นปีเดือนวัน ก่อนเสมอ มันถึงจะเปรียบเทียบกันได้
จากตัวอย่างจะได้
SELECT *
FROM tb_show
WHERE 201002
BETWEEN 201003 AND 201004
เห็นแบบนี้แล้วเข้าใจใช่ไหมคะ
ถ้าสงสัยก็ถามได้นะคะ
|
|
|
|
|
Date :
2010-05-02 13:04:45 |
By :
a |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โอ้ ขอบพระคุณมากๆเลยครับ เข้าใจแล้วครับผม
ความรู้เน้นๆเลย
|
|
|
|
|
Date :
2010-05-02 13:31:19 |
By :
midobun |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|