ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingเงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: เงื่อนไข ตรวจสอบ คำสั่ง SQL ผิดตรงไหนค่ะ ช่วยดูหน่อย ค่ะ  (อ่าน 1027 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
modoindy
Newbie
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 72



ดูรายละเอียด
« เมื่อ: 28 สิงหาคม 2014, 17:46:16 »

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

-จากรูป  ก่อนหน้านี้ จอง 08.00 - 10.00 -หลังจากนั้น
  จอง ต่อ 10.00- 11.00  ไม่ผ่าน  Embarrassed
 เกิดจากอะไร ผิดเงื่อนไขอะไรค่ะ  ทั้งหมด เงื่อนไขที่มี 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
สมุนแก๊งเสียว
*

พลังน้ำใจ: 113
ออฟไลน์ ออฟไลน์

กระทู้: 953



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 28 สิงหาคม 2014, 17:55:29 »

แล้วถ้าจองจาก 10.01 - 12.00 จะผ่านไหมครับ
บันทึกการเข้า

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

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

พลังน้ำใจ: 9
ออฟไลน์ ออฟไลน์

กระทู้: 150



ดูรายละเอียด
« ตอบ #2 เมื่อ: 29 สิงหาคม 2014, 01:02:51 »

ลองใช้ between ดูครับ
where เวลาที่จอง between time1 and time2
บันทึกการเข้า

ขายเสื่อโยคะ TPE ราคาถูกกว่าห้าง โดยร้าน วรรณโณ โยคะ
http://www.facebook.com/wannoyoga
เสื่อโยคะ
สร้างซิกแพค
modoindy
Newbie
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 72



ดูรายละเอียด
« ตอบ #3 เมื่อ: 29 สิงหาคม 2014, 01:05:21 »

แล้วถ้าจองจาก 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
Newbie
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 72



ดูรายละเอียด
« ตอบ #4 เมื่อ: 29 สิงหาคม 2014, 01:11:02 »

ลองใช้ between ดูครับ
where เวลาที่จอง between time1 and time2

พอจะมีตัวอย่างไหมค่ะ
บันทึกการเข้า
modoindy
Newbie
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 72



ดูรายละเอียด
« ตอบ #5 เมื่อ: 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>
บันทึกการเข้า
ยิ้มโค้ด.คอม
สมุนแก๊งเสียว
*

พลังน้ำใจ: 84
ออฟไลน์ ออฟไลน์

กระทู้: 728



ดูรายละเอียด
« ตอบ #6 เมื่อ: 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
บันทึกการเข้า
Extra Cash
สมุนแก๊งเสียว
*

พลังน้ำใจ: 268
ออฟไลน์ ออฟไลน์

กระทู้: 631



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 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 ไปได้เยอะเลยครับ
บันทึกการเข้า

tlecreate
Newbie
*

พลังน้ำใจ: 5
ออฟไลน์ ออฟไลน์

กระทู้: 44



ดูรายละเอียด
« ตอบ #8 เมื่อ: 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"
« แก้ไขครั้งสุดท้าย: 29 สิงหาคม 2014, 07:28:21 โดย tlecreate » บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์