[07.04.2009]
วันนี้ก็ให้แก้ไขปรับปรุง asp ของเมื่อครั้งที่แล้ว
คือให้มีการทำเป็น dynamic query database
ปกติแล้ว เวลาเราเขียน sql และมีเงื่อนไขหลายๆ อัน เราจะใช้
WHERE … AND … AND … เป็นต้น แต่ในบางครั้ง การทำ web application
และมีการเชื่อมต่อฐานข้อมูล ก็จำเป็นต้องทำให้มัน query อย่างมีประสิทธิภาพมากขึ้น
เช่น การสร้างหน้าฟอร์ม ให้ผู้ใช้ค้นหา โดยที่มี input หลายช่องนั้น
ถ้าช่องไหนที่ผู้ใช้ไม่ได้ใส่ข้อมูลมา เราก็ไม่จำเป็นจะต้องใส่เงื่อนไขในการ query ไปด้วย
มาดูตัวอย่างที่ทำกันเลยดีกว่า

จากฟอร์มด้านบน คือ ผู้ใช้สามารถใส่ข้อมูลอะไรก็ได้ แล้วกด submit เพื่อ search
(เนื่องจากว่า ไม่ค่อยมีเวลา จึงไม่ได้ตกแต่งให้สวยงาม ^^)
static :
ไม่ว่าผู้ใช้จะใส่ input company name อย่างเดียว หรือ contact name อย่างเดียว หรือ input ทั้งสองค่า sql string ที่ใช้ก็เหมือนกัน คือ
sqlString = “select * from Customers where CompanyName like ‘%”&request.form(“cpn”)&“%’ and ContactName like ‘%”&request.form(“ctn”)&“%’”
(request.form(“cpn”) คือ สิ่งที่ผู้ใช้ใส่ลงมาในช่อง company name
request.form(“ctn”) คือ สิ่งที่ผู้ใช้ใส่ลงมาในช่อง contact name)
dynamic :
เมื่อผู้ใช้ใส่ input company name อย่างเดียว จะต้องได้
sqlString = “select * from Customers where CompanyName like ‘%”&request.form(“cpn”)&”%’”
เมื่อผู้ใช้ใส่ contact name อย่างเดียว จะต้องได้
sqlString = “select * from Customers where ContactName like ‘%”&request.form(“ctn”)&”%’”
เมื่อผู้ใช้ใส่ input ทั้งสองค่า จะต้องได้
sqlString = “select * from Customers where CompanyName like ‘%”&request.form(“cpn”)&”%’ and ContactName like ‘%”&request.form(“ctn”)&”%’”
จะสังเกตว่า ในการ search แต่ละครั้ง sql ที่ใช้ query จะไม่เหมือนกันเลย
นี่แหละจึงเรียกว่าเป็น dynamic database คือมีการเปลี่ยนแปลงตลอดทุกครั้งที่ query
ทีนี้มาดูกันว่า เราจะต้องเขียนยังไง เพื่อให้มันเป็น dynamic database
ก็ง่ายๆ ใส่ IF เข้าไปเช็ค และทำการ ต่อ sql string แค่นั้นเอง
Dim sqlString
sqlString = “select * from Customers “
If len(request.form(“cpn”)) > 0 Then
sqlString = sqlString & “where CompanyName like ‘%”&request.form(“cpn”)&”%’ “
If len(request.form(“ctn”)) > 0 Then
sqlString = sqlString & “and ContactName like ‘%”&request.form(“ctn”)&”%’”
End If
ElseIf len(request.form(“ctn”)) > 0 Then
sqlString = sqlString & “where ContactName like ‘%”&request.form(“ctn”)&”%’ “
End If
(ในที่นี้ใช้ภาษา asp ในการเขียน ซึ่งเป็น VBScript ดังนั้นจึงมี syntax คล้ายๆ ภาษา VB นั่นเอง)
ถ้าเป็นภาษาอื่นๆ ก็ทำได้เช่นเดียวกัน
ดูตัวอย่าง code : aspWithNorthwind.rar

