Chức năng tìm kiếm gần như là bắt buộc đối với mỗi website. Có nhiều cách để xây dựng chức năng tìm kiếm, trong bài viết này tôi chia sẻ với các bạn một cách xây dựng chức năng tìm kiếm cho trang web với việc viết Store truy vấn dữ liệu theo điều kiện tìm kiếm.
Thông thường chức năng tìm kiếm trên trang web thường có 1 Textbox và một Button để người dùng nhập từ khóa và tìm kiếm. Nếu muốn tìm kiếm nhiều điều kiện bạn lại điều hướng người dùng đến chức năng tìm kiếm nâng cao. Ở bài này có lẽ tôi chỉ minh họa cách viết thủ tục truy vấn dữ liệu theo từ khóa thôi nhé, các điều kiện khác nếu cần thêm vào cũng không khó, điều quan trọng là cách làm để bạn có thể áp dụng. Giả sử tôi tìm kiếm với từ khóa "chức năng tìm kiếm". Khi đó tôi sẽ phân tích từ khóa và viết thủ tục để tìm kiếm với các từ khóa "chức năng tìm kiếm","chức năng tìm","chức năng","chức","năng","tìm","kiếm" và ở kết quả tìm kiếm bạn sẽ đánh dấu các từ khóa tìm kiếm (Highlighting Keywords) như ở trang DEMO. Ta sẽ viết hàm phân tích từ khóa này như sau: Trước tiên ta cần hàm tách chuỗi thành mảng CREATE FUNCTION fnSplit( @strInput NVARCHAR(4000), @char char(1)) RETURNS @Tbl TABLE (id int IDENTITY(1,1),part NVARCHAR(1000)) AS BEGIN DECLARE @SubStr NVARCHAR(100), @i INT SET @i = CHARINDEX(@char, @strInput, 0) WHILE @i > 0 BEGIN SET @SubStr = LEFT(@strInput,@i-1) INSERT INTO @Tbl SELECT @SubStr SET @strInput = SUBSTRING(@strInput, @i+1,4000) SET @i = CHARINDEX(@char, @strInput, 0) END INSERT INTO @Tbl SELECT LTRIM(RTRIM(@strInput)) RETURN END Hàm này sẽ tách chuỗi đưa vào với ký tự đại diện (Giống như hàm Split trong C# vậy) Tiếp theo ta viết hàm phân tích chuỗi như sau: CREATE FUNCTION fKeySearch(@strInput NVARCHAR(400), @char char(1)) RETURNS @_TblTemp TABLE (id int IDENTITY(1,1),part NVARCHAR(400)) AS BEGIN DECLARE @SubStr NVARCHAR(100), @i INT, @p nvarchar(400) SET @p=@strInput INSERT INTO @_TblTemp SELECT @strInput SET @i = CHARINDEX(@char, REVERSE(@strInput)) WHILE @i >0 BEGIN SET @SubStr = right(@strInput,CHARINDEX(@char, REVERSE(@strInput))) SET @strInput = replace(@strInput,@SubStr,'') INSERT INTO @_TblTemp SELECT @strInput SET @i = CHARINDEX(@char, REVERSE(@strInput)) END INSERT INTO @_TblTemp SELECT part FROM dbo.fnSplit(@p,@char) WHERE id>1 AND len(rtrim(ltrim(part)))>2 RETURN END Khi truy vấn hàm này bạn sẽ có kết quả tương tự như sau: (Bạn có thể tối ưu thêm hàm này nếu bạn thích nhé) Giả sử tôi có bảng TB_TroChoi với các trường TieuDe, AnhDaiDien, MoTa, id, TrangThai, ... Ta sẽ dùng kỹ thuật bảng tạm và vòng lặp để thực hiện truy vấn dữ liệu theo từ khóa tìm kiếm như sau CREATE PROCEDURE TB_TroChoi_Search @TuKhoa nvarchar(300), @char char(1) AS BEGIN DECLARE @_Table_GameSearch_Temp TABLE( indexs int IDENTITY (1,1) NOT NULL, Title nvarchar(250), ImgUrl nvarchar(250), Descript nvarchar(500), id int) DECLARE @cr int, @part nvarchar(400), @check int DECLARE @mRow int SELECT @mRow = isnull(Max([id]),0) FROM dbo.fKeySearch(@TuKhoa,@char) SET @cr = 1 WHILE @cr <=@mRow BEGIN SELECT @part=part FROM dbo.fKeySearch(@TuKhoa,@char) WHERE id=@cr INSERT INTO @_Table_GameSearch_Temp(Title, ImgUrl, Descript,id) SELECT replace(tg.TieuDe, @part,'<u>'+@part+'</u>') AS Title,tg.AnhDaiDien, tg.MoTa, tg.id FROM TB_TroChoi_Search tg WHERE (tg.TieuDe LIKE '%'+@part+' %' OR tg.MoTa LIKE '%'+@part+' %') AND tg.TrangThai=1 AND tg.id NOT IN (SELECT tm.id FROM @_Table_GameSearch_Temp tm) SET @cr = @cr + 1 END SELECT Title, ImgUrl, Descript, id FROM @_Table_GameSearch_Temp ORDER BY indexs END Trong thủ tục trên bạn thấy tôi truy vấn với điều kiện like với mỗi từ khóa ở hàm phân tích từ khóa trên và insert nó vào bảng tạm với điều kiện là các id tìm thấy của từ khóa sau không được thêm vào nữa khi đã có trong bảng tạm ( AND tg.id NOT IN (SELECT tm.id FROM @_Table_GameSearch_Temp tm) ) và đánh dấu các từ khóa bằng lệnh replace(tg.TieuDe, @part,'<u>'+@part+'</u>') AS Title Trên đây là tôi minh họa chức năng tìm kiếm cho website của bạn, Hy vọng sẽ hữu ích đối với các bạn đang gặp vấn đề khi xây dựng chức năng tìm kiếm. Bạn cũng có thể sử dụng công cụ tìm kiếm tùy chỉnh của google. Nếu bạn cần có thể để lại yêu cầu thì ở bài sau tôi sẽ hướng dấn áp dụng trong trang asp.net |
Xây dựng chức năng tìm kiếm cho website
http://hmclip.net
Ý kiến bạn đọc
Tin tức khác
ASP.NET – Serialize đối tượng .NET thành JSON và ngược lại
- 11/4/2012
ASP.NET – Sử dụng một số Extender trong Ajax Control Toolkit
- 4/4/2012
ASP.NET – Cài đặt và cấu hình Ajax Control Toolkit
- 4/4/2012
WebService – Cơ bản về SOAP, WSDL và ASP.NET Web Service
- 14/3/2012
Hiển thị danh sách các tùy chọn khi nhấn vào thuộc tính của ckeditor được đặt trong modalpopup
- 12/3/2012
Ajax – Ví dụ minh họa sử dụng XMLHttpRequest
- 12/3/2012
Ajax – Tìm hiểu về XMLHttpRequest
- 12/3/2012
Hướng dẫn xây dựng Active Menu với Asp.net - SQL Server
- 1/2/2012
Tổng hợp các hàm SQL server tự định nghĩa có thể hữu ích cho bạn
- 7/1/2012
Hướng dẫn tạo SlideShow tin nổi bật
- 10/12/2012
Tin tiêu điểm
-
Export 1 Dataset hoặc DataTable thành file Excel,Word,PDF và CSV (29,878)
-
Xây dựng trang đăng nhập trong asp.net – C# (29,205)
-
Truyền dữ liệu theo phương thức POST sang 1 trang khác trong ASP.NET (23,876)
-
Tạo mã an toàn ( Captcha Image ) cho website (20,636)
-
Lưu trữ và hiển thị hình ảnh trong Database - ASP.NET (20,631)
-
Chọn và upload nhiều file giống như Gmail sử dụng Jquery và ASP.NET (20,369)
-
Import dữ liệu từ file Excel sử dụng ASP.NET (19,782)
-
Một số lỗi thường gặp khi rewrite url trong ASP.Net (sử dụng UrlRewritingNet) (18,794)
-
ViewState trong ASP.Net (18,244)
-
Hướng dẫn tạo SlideShow tin nổi bật (18,127)
Gallery
Text Links
Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
ca do bong da online
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
ca do bong da online
Tags
asp.net
JavaScript
Lập trình
Cơ sở dữ liệu
jquery
Csharp
Ajax
Thủ thuật
JavaScript
menu
Sql Server
Lập trình C#
WebService
stty
Sql
Phân trang
Rewrite
Mã hoá
Backup
Thủ thuật lập trình
Store procedure
Accordion
Validation
Store
Upload
Slide
jQueryPlugin
StoreProcedure
Regular Expression
Regex
android
Quick and snow
HTML5
WPF
WCF
Copyright © 2011 - 2012 vietshare.vn
by
phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.