ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: modoindy ที่ 28 สิงหาคม 2014, 17:46:16



หัวข้อ: เงื่อนไข ตรวจสอบ คำสั่ง 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 เป็นเท็จ"
 หรือ
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"