หัวข้อ: เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ เริ่มหัวข้อโดย: modoindy ที่ 28 สิงหาคม 2014, 17:46:16 เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย
-จากรูป ก่อนหน้านี้ จอง 08.00 - 10.00 -หลังจากนั้น จอง ต่อ 10.00- 11.00 ไม่ผ่าน :-[ เกิดจากอะไร ผิดเงื่อนไขอะไรค่ะ ทั้งหมด เงื่อนไขที่มี 3 เงื่อนไข เพิ่มเติมอะไรอีกค่ะ แก้อะไร ปล. 10.00 ทำไมจองซ่ำไม่ได้ รึ ค่ะ ขอบคุณค่ะ (http://s30.postimg.org/xqc9zh3f5/11111.jpg) rd_room = Request.Form("rd_room") rd_date = Request.Form("rd_date") rd_time1 =Cstr(Request.Form("rd_time1")) rd_time2 = Cstr(Request.Form("rd_time2")) id = Int(Request.Form("id")) If ConnectDB() = True Then sql = "Select rd_room, rd_date, rd_time1 From RoomOrder " & _ "Where (rd_room='"& rd_room &"') And (rd_date='"& rd_date &"') And (rd_time1='"& rd_time1 &"')" Set rs = Conn.Execute(sql) If Not rs.EOF Then XXXXXXXXXXXXXXXXXXXXXX End If sql = "Select rd_room, rd_date, rd_time1, rd_time2 From RoomOrder " & _ "Where (rd_room='"& rd_room &"') And (rd_date='"& rd_date &"') <= (rd_time1='"& rd_time1 &"')" Set rs = Conn.Execute(sql) If Not rs.EOF Then XXXXXXXXXXXXXXXXXXXXX End If sql = "Select rd_room, rd_date, rd_time1, rd_time2 From RoomOrder " & _ "Where (rd_room='"& rd_room &"') And (rd_date='"& rd_date &"') >= (rd_time1='"& rd_time1 &"') <= (rd_time2='"& rd_time2 &"')" Set rs = Conn.Execute(sql) If Not rs.EOF Then XXXXXXXXXXXXXXXXXXXXX End If หัวข้อ: Re: เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ เริ่มหัวข้อโดย: dragons_first ที่ 28 สิงหาคม 2014, 17:55:29 แล้วถ้าจองจาก 10.01 - 12.00 จะผ่านไหมครับ
หัวข้อ: Re: เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ เริ่มหัวข้อโดย: cyberwizard ที่ 29 สิงหาคม 2014, 01:02:51 ลองใช้ between ดูครับ
where เวลาที่จอง between time1 and time2 หัวข้อ: Re: เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ เริ่มหัวข้อโดย: modoindy ที่ 29 สิงหาคม 2014, 01:05:21 แล้วถ้าจองจาก 10.01 - 12.00 จะผ่านไหมครับ เป็นแบบ option selecte ค่ะ ควร ทำอย่างไรดีค่ะ วิธีตรวสอบ (http://s27.postimg.org/w3ptmsas3/untitled.jpg) ดีใจที่มีคนน้ำใจงาม เข้ามาอ่าน ให้ค้ำปรึกษา ค่ะ :wanwan017: <option value="00.00" selected > เริ่ม </option> <option value="8:00">08.00 น</option> <option value="9:00">09.00 น</option> <option value="10:00">10.00 น</option> <option value="11:00">11.00 น</option> <option value="12:00">12.00 น</option> <option value="13:00">13.00 น</option> <option value="14:00">14.00 น</option> <option value="15:00">15.00 น</option> </select>- <select name="rd_time2" id="rd_time2"> <option value="00:00" selected>สิ้นสุด</option> <option value="9:00">09.00 น</option> <option value="10:00">10.00 น</option> <option value="11:00">11.00 น</option> <option value="12:00">12.00 น</option> <option value="13:00">13.00 น</option> <option value="14:00">14.00 น</option> <option value="15:00">15.00 น</option> <option value="16:00">16.00 น</option> หัวข้อ: Re: เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ เริ่มหัวข้อโดย: modoindy ที่ 29 สิงหาคม 2014, 01:11:02 ลองใช้ between ดูครับ where เวลาที่จอง between time1 and time2 พอจะมีตัวอย่างไหมค่ะ หัวข้อ: Re: เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ เริ่มหัวข้อโดย: modoindy ที่ 29 สิงหาคม 2014, 01:19:07 <select name="rd_time1" id="rd_time1">
<option value="00.00" selected > เริ่ม </option> <option value="8:00">08.00 น</option> <option value="9:00">09.00 น</option> <option value="10:00">10.00 น</option> <option value="11:00">11.00 น</option> <option value="12:00">12.00 น</option> <option value="13:00">13.00 น</option> <option value="14:00">14.00 น</option> <option value="15:00">15.00 น</option> </select>- <select name="rd_time2" id="rd_time2"> <option value="00:00" selected>สิ้นสุด</option> <option value="8:59">09.00 น</option> <option value="9:59">10.00 น</option> <option value="10:59">11.00 น</option> <option value="11:59">12.00 น</option> <option value="12:59">13.00 น</option> <option value="13:59">14.00 น</option> <option value="14:59">15.00 น</option> <option value="15:59">16.00 น</option> หัวข้อ: Re: เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ เริ่มหัวข้อโดย: ยิ้มโค้ด.คอม ที่ 29 สิงหาคม 2014, 02:57:50 อ้างถึง sql = "Select rd_room, rd_date, rd_time1, rd_time2 From RoomOrder " & _ "Where (rd_room='"& rd_room &"') And (rd_date='"& rd_date &"') >= (rd_time1='"& rd_time1 &"') <= (rd_time2='"& rd_time2 &"')" แก้ตรงนี้เป็น < (rd_time2='"& rd_time2 &"')" ดูครับ ปล. ผิดพลาดขออภัยด้วยน่ะครับ ประมาณว่าเดาเอาครับ พอดีเคยเขียนแต่กับเว็บอ่ะครับ :wanwan017: หัวข้อ: Re: เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ เริ่มหัวข้อโดย: Extra Cash ที่ 28 สิงหาคม 2014, 20:40:29 ไม่เห็นข้อมูลใน database คงฟันธงไม่ได้ แต่ที่ผิดส่วนมากน่าจะเกิดจากตามนี้
value = "8:00" นั้นมีค่ามากกว่า "10:00" ครับ เพราะเป็น string ไม่ใช่ number ควรเขียนเป็น "08:00" ดีกว่า เวลา compare จะพลาดน้อยลง วันที่ "28/08/2557" ก็มีค่ามากกว่า "01/09/2557" เหมือนกันครับถ้าเป็น string อีกอย่างน่าจะเก็บข้อมูลใน table เป็บแบบ date_time ดีกว่าครับ และไม่ต้องแยก date กับ time เป็นคนละ column กัน จะลดปัญหาเรื่องการ compare ไปได้เยอะเลยครับ หัวข้อ: Re: เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ เริ่มหัวข้อโดย: tlecreate ที่ 29 สิงหาคม 2014, 07:20:48 ลองแก้ <option value="00.00" <= เป็นนาทีดีไหมครับ ทำแบบนี้จะรองรับการกรอกเป็นตัวเลขเลย
แล้วก็ เช่น 1 วันมี 24 ช.ม. 0.00 = 0 1.00 = 60 2.00 = 120 . . . 20.00 = 1200 . . 24.00 = 1440 เวลามีคนมาจองก็เก็บค่าเวลาเริ่มต้นเอาไว้ เช่น จองตั้งแต่เวลา 10.00-11.00 สมมติว่าห้องกำลังวาง จับมันแปลงร่างเป็นนาทีเลยครับ A = 10.00 = 600 B = 11.00 = 660-1 = 659 ### ลบ 1 เพื่อแก้ปัญหาคนที่ select เวลา 11.00 แล้วไม่เข้าเงื่อนไข ### จะได้ B - (A+1) = 60 ### +1 เพื่อให้คิดเป็นนาทีที่ประชุมได้ถูกต้อง เผื่อเอาค่านี้ไปทำอย่างอื่น เช่น ลูกค้าคนนี้ เช่ามาทั้งหมดกี่นาที เป็นเงินกี่บาท ครบกี่นาทีกี่ชั่วโมง ได้ประชุมฟรี ฯลฯ### table ข้อมูลหลักๆจะเก็บประมาณนี้ | rd_id | rd_begin | rd_time | rd_end | 1 600 59 659 2 900 59 959 ตานี้อีกคนเลือกห้องบ้าง สมมติมีแค่ห้องเดียวอ่ะ 10.30 - 12.00 คราวนี้ต้องมาเช็คละ 10.30 A = 630 12.00 B = 720-1 = 719 Querystring = "SELECT * FROM table WHERE (rd_begin BETWEEN 630 AND 719) OR (rd_end BETWEEN 630 AND 719)" อ้างถึง rd_begin BETWEEN 630 AND 719 "rd_begin มีค่าระหว่าง 630 - 719 rd_begin เป็น 600 กับ 900 เป็นเท็จ" ข้อมูลจะออกมา ได้ 1 แถวหรือ rd_end BETWEEN 630 AND 719 "rd_end มีค่าระหว่าง 630 -719 rd_begin เป็น 659 มี 1 อัน ส่วนอีกอัน 959 ไม่มี" เป็นจริง 1 อัน เท็จ หรือ จริง = จริง | rd_id | rd_begin | rd_time | rd_end | 1 600 59 659 ดังนั้น หาก Query นี้มีข้อมูลออกมา หรือ num rows > 0 คือห้องประชุมไม่ว่าง แล้วเอาดึงค่ามาหากได้หลายค่าก็นับแถวแล้ว fetch หาก row = 0 ห้องประชุมว่างก็จับ insert เลยครับ สมมติ เขาประชุมนาน 10.30 - 15.30 เลย A = 630 B = 930-1 = 929 Querystring = "SELECT * FROM table WHERE (rd_begin BETWEEN 630 AND 929) OR (rd_end BETWEEN 630 AND 929)" อ้างถึง rd_begin BETWEEN 630 AND 929 ###"rd_begin มีค่าระหว่าง 630 - 929 rd_begin เป็น 600 เทส กับ 900 เป็นจริง" เป็นจริง แถวของ id ที่ 2 หรือ rd_end BETWEEN 630 AND 929 ###"rd_end มีค่าระหว่าง 630 -929 rd_begin เป็น 659 มี 1 อัน ส่วนอีกอัน 959 ไม่มี" เป็นจริง 1 อันในแถวของ id ที่ 1 ดังนั้น ข้อมูลก็จะออกมา ทั้ง แถวของ id ที่ 1 และ 2 | rd_id | rd_begin | rd_time | rd_end | 1 600 59 659 2 900 59 959 ก็จะสามารถบอกได้ว่า เวลามันทาบช่วงไหนบ้าง หวังว่าคงช่วยได้ไม่มากก็น้อยนะครับ ส่วนฟังชันแปลงนาทีเป็น ชม. ลองหาเอานะครับไม่ยาก ไม่แน่ใจเหมือนกันนะ ไม่ได้ลองกับ data จริง คิดในหัวเอา ยังไงลองไปประยุกต์ดูนะครับ ถ้าจะใส่เลขห้องเพิ่มก็ Querystring = "SELECT * FROM table WHERE ( (rd_begin BETWEEN 630 AND 929) OR (rd_end BETWEEN 630 AND 929) ) AND room = 1" |