30/09/2018, 20:43

Hướng giải quyết tìm kiếm với nhiều option

mình đang làm phần tìm kiếm nâng cao cho trang web , còn cách nào khác ngoài cách lọc từng params truyền vào rồi dựa vào params đó để tạo câu lệnh sql ko vậy …
vd: tìm kiếm nâng cao 1 bài
timkiem (tiêu đề, tên người đăng, ngày đăng ,tình trạng , chuyên mục)

mình thì làm theo cách thủ công là kiểm tra từng trường bằng if else rồi sau đó mới xác định cần nối những bảng nào và cần tìm theo đk như thế nào , nhưng cách này mà gặp vài chục bảng và vài chục trường là xác định chết vì đk quá nhiều…

Nguyen Ca viết 23:00 ngày 30/09/2018

Không hiểu câu hỏi cho lăm, mà chả có khi nào mà tìm kiếm trong vài chục table đâu. tối ưu nhất là join dưới 4 table, trên thì nên tách ra.
Có thể viết proc trong trường hợp cau SQL phức tạp.

Reoteu Ray viết 22:52 ngày 30/09/2018

mình tìm trên mạng thì thấy họ viết rút gọn thế này : để khỏi phải kiểm tra rỗng
and (@TenSanPham =‘0’ OR P.ProductName like ‘%’+@TenSanPham+’%)

câu này có phải là : nếu tên sản phẩm = rỗng thì trả về true , còn lại đk phía sau thì không quan tâm , còn tên sản phẩm # rỗng thì bỏ qua đk đầu và sử dụng đk sau để tìm phải ko…

mà mình đang làm với jpa , nên gọi cái produces nó hơi khó khăn cho nên mình mới dùng câu sql trực tiếp…

Nguyen Ca viết 22:53 ngày 30/09/2018

dùng ORACLE thì có hàm NVL với decode để kiêm tra giá trị, thử áp dụng xem được không.

(@TenSanPham =‘0’ OR P.ProductName like ‘%’+@TenSanPham+’%)

Cái này điều kiện thỏa một trong 2 thôi. bởi vì tên sản phẩ chẳng bao giờ là ‘0’. nên chỉ những record thỏa mãn cái điều kiện sau mới được lấy. Nhưng làm vậy dưới SQL truy vân sẽ chậm nếu điều kiện như thế quá nhiều.
Tốt nhất kiểm tra trên Java. xác đình những điều kiện common. những cái riêng thì tạo function riêng trả vả chuổi điêu kiện tương ứng, vừa gọn, dễ maintenance.

Reoteu Ray viết 22:58 ngày 30/09/2018

vậy là mình vẫn nên viết các câu lệnh if else bên java để lọc các tham số truyền vào rồi dựa vào kết quả lọc mà tạo ra câu sql hợp lý phải không

Bài liên quan
0