ฝึกงาน #4

[07.04.2009]

วันนี้ก็ให้แก้ไขปรับปรุง asp ของเมื่อครั้งที่แล้ว

คือให้มีการทำเป็น dynamic query database

ปกติแล้ว เวลาเราเขียน sql และมีเงื่อนไขหลายๆ อัน เราจะใช้
WHERE … AND … AND … เป็นต้น แต่ในบางครั้ง การทำ web application
และมีการเชื่อมต่อฐานข้อมูล ก็จำเป็นต้องทำให้มัน query อย่างมีประสิทธิภาพมากขึ้น

เช่น การสร้างหน้าฟอร์ม ให้ผู้ใช้ค้นหา โดยที่มี input หลายช่องนั้น
ถ้าช่องไหนที่ผู้ใช้ไม่ได้ใส่ข้อมูลมา เราก็ไม่จำเป็นจะต้องใส่เงื่อนไขในการ query ไปด้วย

มาดูตัวอย่างที่ทำกันเลยดีกว่า

northwind_customer_form

จากฟอร์มด้านบน คือ ผู้ใช้สามารถใส่ข้อมูลอะไรก็ได้ แล้วกด 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

[DB] Steps in query processing

เอามาแปะไว้หลังสอบเสร็จแล้ว

จดจากในห้อง แต่ไม่ได้อ่านก่อนสอบ เศร้าจิต – -”

(มั่วไป ไม่ตรงสักอัน 555)