เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ

เริ่มโดย modoindy, 28 สิงหาคม 2014, 17:46:16

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

modoindy

เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย

-จากรูป  ก่อนหน้านี้ จอง 08.00 - 10.00 -หลังจากนั้น
  จอง ต่อ 10.00- 11.00  ไม่ผ่าน  :-[
เกิดจากอะไร ผิดเงื่อนไขอะไรค่ะ  ทั้งหมด เงื่อนไขที่มี 3 เงื่อนไข
  เพิ่มเติมอะไรอีกค่ะ แก้อะไร 
ปล. 10.00 ทำไมจองซ่ำไม่ได้ รึ ค่ะ

ขอบคุณค่ะ



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      

dragons_first

รับทำเว็บไซต์ ตามขอบเขตของลูกค้าราคาเบาๆ

รับแก้สคริปท์ เพิ่มระบบ เปลี่ยนแปลงเลเอาท์เว็บไซต์ จัด cssใหม่ แก้การแสดงผลผิดเพี้ยน
ท่านจะได้รับการบริการที่เป็นกันเอง ราคาไม่แพง ต่อรองได้(แต่ไม่น่าเกลียด) คุยกันฉันมิตร นะฮ๊าฟฟฟฟฟ

cyberwizard

ขายเสื่อโยคะ TPE ราคาถูกกว่าห้าง โดยร้าน วรรณโณ โยคะ
http://www.facebook.com/wannoyoga
[direct=http://www.healthyenrich.com/การเลือกซื้อเสื่อโยคะ-yoga-mat-t/]เสื่อโยคะ[/direct]
[direct=http://www.healthyenrich.com]สร้างซิกแพค[/direct]

modoindy

อ้างถึงจาก: dragons_first ใน 28 สิงหาคม 2014, 17:55:29
แล้วถ้าจองจาก 10.01 - 12.00 จะผ่านไหมครับ

เป็นแบบ option selecte ค่ะ ควร ทำอย่างไรดีค่ะ วิธีตรวสอบ  

ดีใจที่มีคนน้ำใจงาม เข้ามาอ่าน ให้ค้ำปรึกษา ค่ะ
: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>

modoindy


modoindy

<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>

ยิ้มโค้ด.คอม

อ้างถึง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:

Extra Cash

ไม่เห็นข้อมูลใน 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 ไปได้เยอะเลยครับ

[direct=http://www.prodipper.com]PRO DIPPER
ตัวแทนจำหน่าย สีลอกได้ Plasti Dip แท้
อย่างเป็นทางการจาก Performix อเมริกา
[/direct]
       [direct=http://www.votejung.com]โหวดจัง
       โปรโมทเว็บไซต์ฟรี![/direct]
       [direct=http://fbfansmaster.com]FB FANS MASTER
       Buy Facebook Likes[/direct]

tlecreate

ลองแก้ <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 เป็นเท็จ"
หรือ
rd_end BETWEEN 630 AND 719 "rd_end มีค่าระหว่าง 630 -719 rd_begin เป็น 659 มี 1 อัน ส่วนอีกอัน 959 ไม่มี" เป็นจริง 1 อัน

เท็จ หรือ จริง = จริง
ข้อมูลจะออกมา ได้ 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"