วิธีการแบ่ง Page ASP.Net ด้วย SQL Server 2005

หลายครั้งที่ต้อง Mantenance เว็บใหญ่ๆ ที่ทำด้วย Asp.net และ Sql server ซึ่งมักจะเจอปัญหา Page load ช้า เนื่องจาก Query ข้อมูลจำนวนมากจาก ฐานข้อมูล เพื่อมาเก็บไว้ใน DataTable แล้วเราก้อค่อย แบ่ง page จากข้อมูลใน DataTable อีกที

ลองนึกภาพดูนะครับ ถ้าเรามีข้อมูลในเว็บบอร์ดที่มีคนออนไลน์พร้อมกัน หลายๆ พันคน และมีจำจวนข้อมูลที่ต้อง Query จากฐานข้อมูล เป็น แสน Records  เราอาจจะไม่เอามาทั้งหมด โดยอาจจะให้แสดงย้อนหลังได้เพียบ 10 หน้า โดยแสดงหน้าละ 150 รายการ รวมกันทั้งหดม ก้อ 1500 Records ที่เราต้อง Query จาก Database ของเรา แล้วต้องมาเสียเวลา แบ่งหน้าด้วย Pagging หรือ โดยใช้ Feature ของ DataGrid ซึ่งทำให้ช้าเป็นอย่างมาก โดยเฉพาะตัว DataGrid เองก้อทำงานช้ามากอยู่แล้ว

แล้วก้อจะเจอคำถามอยู่บ่อยๆ ว่า ทำไม Sql Server ถึงไม่มี Limit เหมือนกับ MySQL จะได้ช่วยให้แบ่าง Page ได้ง่ายๆ
วันนี้ผมเอาวิธีการ ที่เหมือนกับ Select Limit มาฝากกันครับ

อันดับแรก เราต้องกำหนด ID ให้กับ ข้อมูลใน ฐานข้อมูลก่อน โดยใช้ ROW_NUMBER()

SELECT ...
FROM
   (SELECT ...
         ROW_NUMBER() OVER(ORDER BY ColumnName) AS RowNum
    FROM Employees e
   ) AS DerivedTableName
WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1

หลังจากนั้น เราก้อกำหนดค่าให้กับ @startRowIndex และก้อ @maximumRows คับ ว่าจะให้เริ่มต้นจาก Record ไหน และก้อจำนวนเท่าไหร่

เช่น

SELECT RowNum, EmployeeID, LastName, FirstName
FROM
   (SELECT EmployeeID, LastName, FirstName
       ROW_NUMBER() OVER(ORDER BY EmployeeID) AS RowNum
    FROM Employees e
   ) AS EmployeeInfo

แค่นี้ก้อจะสามารถแบ่ง Query เป็น ช่วงๆ ได้เหมือน Limit ใน MySQL ได้แล้วครับ
หรืออาจจะเอามาประยุกต์ใช้ เป็นแบบนี้ก้อได้นะครับ

DECLARE @startRowIndex INT
DECLARE @maximumRows INT
DECLARE @page INT
 
SET @maximumRows = 200
SET @page = 3
 
SET @startRowIndex = (@page * @maximumRows) - @maximumRows;
IF @page > 1
BEGIN
SET @startRowIndex = (@startRowIndex + 1)
SET @maximumRows = (@maximumRows -1)
END
 
SELECT *
FROM
(SELECT ROW_NUMBER() OVER(ORDER BY USERNAME) AS ROWNUM,
USERNAME, FNAME, LNAME, EMAIL
FROM MEMBER
) AS DerivedTableName
WHERE ROWNUM BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows)

ได้ผลเป็นยังไงแวะกลับมาเล่าสู่กันฟังบ้างนะครับ :-)

เขียน css อย่างสั้น ง่ายๆ โหลดไวๆ

แน่นอนครับ ถ้ามันสั้นได้ จะเขียนยาวไปทำไมให้เยิ่นเย้อ มาดูกันว่า property ตัวไหน ย่อได้บ้าง

Background

แบบปกติ

background-color: #87CEFA; ———————–/*สีแบ็คกราวน์*/
background-position: left top; ———————-/*ตำแหน่งชิดซ้าย บน*/
background-repeat: no-repeat;——————– /*ใส่ไปรูปเดียว ไม่ต้องทำซ้ำ*/
background-image: url(images/arrow.gif); ——–/*เอารูปจากที่นี่นะ*/
background-attachment: fixed; —————-/*ใส่ตรงไหน fix ไว้ตรงนั้นเลย ต่อให้เลื่อน scroll bar ลงมาก็ยังเห็น*/

แบบย่อแล้ว
background: #87CEFA url(images/arrow.gif) no-repeat fixed left top; ควรเรียงตามลำดับครับ ไม่เช่นนั้น IE6 อาจไม่แสดงในบางกรณี

ถ้าเขียนแบบนี้
background: #87CEFA url(images/arrow.gif) no-repeat fixed 5px 10px; ตัวเลขค่าแรกคือระยะห่างแบ็คกราวน์ในแนวแกน x อันที่2 คือแนวแกน y

Border

แบบปกติ

border-width:1px;
border-style:solid;
border-color:#87CEFA;

แบบย่อแล้ว
border: 1px solid #87CEFA; อันนี้สลับที่กันได้ ไม่มีปัญหา

Font

แบบปกติ

font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-weight: bold;
font-size: 14px;
line-height: 20px;——————/*ระยะห่างระหว่างบรรทัด*/

แบบย่อแล้ว
font: bold 14px/20px Verdana, Geneva, Arial, Helvetica, sans-serif; ห้ามสลับตำแหน่ง ไม่งั้น ie6 ไม่ทำงาน

Margin

แบบปกติ

margin-top: 1px;
margin-right: 2px;
margin-bottom: 3px;
margin-left: 4px;

แบบย่อแล้ว
margin: 1px 2px 3px 4px; เรียง บน ขวา ล่าง ซ้าย ตามเข็มนาฬิกาครับ

แบบย่อของย่ออีกที
หากเป็น margin: 10px 5px 10px 5px; จะได้ margin: 10px 5px; ค่าแรกคือ บนล่าง ค่าที่สองคือ ซ้ายขวา

Padding

แบบปกติ

padding-top: 1px;
padding-right: 2px;
padding-bottom: 3px;
padding-left: 4px;

แบบย่อแล้ว
padding: 1px 2px 3px 4px; เรียง บน ขวา ล่าง ซ้าย ตามเข็มนาฬิกาครับ

แบบย่อของย่ออีกที
หากเป็น padding: 10px 5px 10px 5px; จะได้ padding: 10px 5px; ค่าแรกคือ บนล่าง ค่าที่สองคือ ซ้ายขวา

Color

แบบปกติ

#ffffff
#ff66ee
#cc00ee

แบบย่อแล้ว

#fff
#f6e
#c0e

ค่าสี จะแบ่งเป็น #ff 66 ee คือ R G B นั่นเอง ถ้าซ้ำกัน ดึงมา 1 ตัว เขียนย่อได้เลยครับ

เบราเซอร์ใหม่ Google chrome(กูเกิล โครม)

google chrome เปิดให้ดาวน์โหลดมาทดลองใช้กันได้แล้วครับ กูเกิล โครม เบราเซอร์ จากกูเกิล ซึ่งตอนนี้ยังเป็นตัว beta อยู่ แต่ในอนาคตอาจมีผู้ใช้เยอะ จนผมต้องทำเว้บให้ support เจ้าตัวนี้ด้วยก็ได้ เท่าที่ทดลองใช้ดู ก็เปิดหน้าเว็บต่างๆ ได้ปกติดีครับ ช่องเสิชกับช่อง address bar เป็นช่องเดียวกัน menu bar ไม่มี หรือมีแต่หาไม่เจอไม่รู้ เดี๋ยวลองใช้สักพัก ถ้ามีไรน่าสนใจใหม่ๆจะมาบอกแล้วกันครับ ทดลองโหลดไปใช้กันที่นี่ครับ ดีไม่ดียังไงบอกกันมั่งเน้ออ

Handling array of HTML Form Elements in JavaScript and PHP

วิธีจัดการกับ HTML Array ด้วย javaScript และ PHP

วิธีการจัดการ HTML Array ง่ายๆ ด้วย JavaScript   และ PHP  หลายคนเคยเจอปัญหา เวลาทำ เว็บฟอร์ม ที่มีช่องให้กรอกข้อมูล หรือ CheckBox หลายๆ อัน (Multiple Check box) แต่ต้องการให้เป็นชื่อเดียวกัน เช่น มี Options ให้เลือกหลายๆ อัน ผมเคยเสียเวลาในการหาิวิธีจัดการกับ Form แบบนี้ไปหลายชั่วโมง ก้อเลยอยากจะเอามา Share กัน เผื่อใครที่กำลังหาวิธีอยู่ จะได้ไม่ต้องเสียเวลานาน Read more »

ปฏิทิน (Clendar) ที่แสดงภาษาไทย และปี พ.ศ. ได้

Dynarch Calendar TLE
วันนี้ เอา ปฏิทินจาวาสคริป แบบไทยๆ มาแจก

ทำเว็บไซต์ มาก้อเยอะ Application มาก้อมาก ปกติเวลาทำ ปฏิทิน ก้อไม่ค่อยได้สนใจเรื่องของ ปี เท่าไหร่ Download พวก Calendar ที่เขามีแจกให้ใช้กันทั่วๆ ไป แก้ภาษานิดหน่อย ก้อโอเคแล้ว ส่วนเรื่องของ ปี ก้อปล่อยให้มันเป็น ค.ศ. ไป

ช่วงนี้ทำเว็บที่เกี่ยวกับวัฒนธรรมและความเชื่อ(นับถือ)ของคนไทย และผู้ใช้ส่วนใหญ่ ไทย จริงๆ ไม่เอา 2008 อะ จะเอา 2551, ผมก้อเลยต้องมานั่ง Search หาไปทั่ว เจอมาก้อหลายที่ คิดว่าโชคดีแล้ว  แต่พอดูๆ ไป ก้อเริ่มไม่แน่ใจ ว่าตกลงใช้ได้ป่าวนี่ แก้แล้วหรือยัง มีมาแบ่งให้ใช้บ้างหรือป่าว  Read more »