10/10/2018, 13:21

Xin hướng dẫn làm tìm kiếm nâng cao cho trang web

Mình đang làm phần tìm kiếm nâng cao cho trang tin tức với các tùy chọn như sau

Phạm vi: Title - Description - Content (<input checkbox>)
Chuyên mục: Category (<option>)
Tìm từ ngày đến ngày (<date picker>)

Các tùy chọn trên đều có liên kết với nhau hết.

Hiện tại mình dùng if, else và viết query cho tìm được tới phần Category rồi nhưng phát sinh quá nhiều query (vì mình làm theo kiểu cơ bản, code mình còn khá yếu) nếu làm thêm cái Tìm từ ngày đến ngày nữa thì không biết làm xong có tổng cộng bao nhiêu cái query. hic hic, phát nản với cái này luôn.

Mong các cao thủ góp ý, hướng dẫn giúp mình cách làm đơn giản mà hiệu quả nhất để tối ưu cái tìm kiếm này vì làm theo cách của mình thì khi mà có mấy ngàn bài viết thì chắc đợi dài cổ. Mấy cái tùy chọn nó liên kết với nhau hết nên rắc rối. Hic hic.
Mình cảm ơn các bạn rất nhiều.
sonnb viết 15:24 ngày 10/10/2018
Bạn thử đưa code xem là bạn query những gì nào?
mr.mabu viết 15:23 ngày 10/10/2018
mấy ngàn bài viết thì dùng search engine như sphinx nhé
vipabkt viết 15:37 ngày 10/10/2018
Bạn thử đưa code xem là bạn query những gì nào?

Code của mình là

$search= $_POST['search'];
$title = $_POST['title'];

những cái khác cũng như thế
rồi sau đó

if($title)
$query = Selec * FROM Article WHERE title LIKE '%$search%'

Cứ thế cứ lặp đi lặp lại với các điều kiện giống như trên

Tổng cộng có tới 20 cái query.

mấy ngàn bài viết thì dùng search engine như sphinx nhé

Mình muốn phát triển theo hướng tự viết chứ không dùng opensource bạn ạ, Với lại theo mình tìm hiểu thì còn phải cài đặt Appserver cho nó gì nữa...

Vì mình là thành viên mới nên khung soạn thảo hạn chế nhiều quá mình không đưa chi tiết code của mình được. Mong các bạn thông cảm
vipabkt viết 15:27 ngày 10/10/2018
có ai giúp mình vụ này với.
zest viết 15:37 ngày 10/10/2018
Được gửi bởi vipabkt
có ai giúp mình vụ này với.
đầu tiên phải tổ chức cơ sở dữ liệu, với mỗi một ô trong tìm kiếm nâng cao thì nên có 1 cột trong csdl.
Sau đấy bạn làm một biến $WHERE
Kiểm tra xem nếu ô textbox trong form tìm kiếm nâng cao nào có dữ liệu thì thêm vào biến $WHERE đấy
vipabkt viết 15:34 ngày 10/10/2018
Được gửi bởi zest
đầu tiên phải tổ chức cơ sở dữ liệu, với mỗi một ô trong tìm kiếm nâng cao thì nên có 1 cột trong csdl.
Sau đấy bạn làm một biến $WHERE
Kiểm tra xem nếu ô textbox trong form tìm kiếm nâng cao nào có dữ liệu thì thêm vào biến $WHERE đấy
Bạn có thể nói rõ hơn 1 chút không, thuật toán tìm kiếm của nó đòi hỏi nhiều quá, mình không thể nào hình dung được cách làm nào đơn giản mà hiệu quả nhất. Xin lỗi code mình còn yếu
sonnb viết 15:34 ngày 10/10/2018
Phạm vi: Title - Description - Content (<input checkbox>)
Chuyên mục: Category (<option>)
Tìm từ ngày đến ngày (<date picker>)
Code:
$query = "SELECT * FROM `contents` WHERE ".$where;
if ($title) $where = "title='".$title."'";
if ($description) $where ? $where.= "AND description='".$description."'" : $where.= "description='".$description."'";
....

Tương tự cho các mục còn lại.
- $title, $description... là các field hoặc option từ POST search. Nếu nó có thì cho vào query nếu không thì bỏ qua.
- ở $description bạn thấy có "$where ?", đây là hàm if rút gọn. Để xét xem $where đã được set chưa. Nếu có rồi thì thêm AND để đúng query, còn chưa thì thôi.

Như vậy cuối cùng chỉ có 1 query thôi. Bạn không chịu đưa code lên đây nên ko hiểu tại sao lại cần tới 20 query.
phpcantho.com viết 15:37 ngày 10/10/2018
còn quá trình điều hướng kết quả nữa, anh em cho mấy đoạn ngắn làm sao chạy
coixuong92 viết 15:25 ngày 10/10/2018
Được gửi bởi sonnb
Code:
$query = "SELECT * FROM `contents` WHERE ".$where;
if ($title) $where = "title='".$title."'";
if ($description) $where ? $where.= "AND description='".$description."'" : $where.= "description='".$description."'";
....

Tương tự cho các mục còn lại.
- $title, $description... là các field hoặc option từ POST search. Nếu nó có thì cho vào query nếu không thì bỏ qua.
- ở $description bạn thấy có "$where ?", đây là hàm if rút gọn. Để xét xem $where đã được set chưa. Nếu có rồi thì thêm AND để đúng query, còn chưa thì thôi.

Như vậy cuối cùng chỉ có 1 query thôi. Bạn không chịu đưa code lên đây nên ko hiểu tại sao lại cần tới 20 query.
thks , hướng dẫn đơn giản mà dễ hiểu
còn 20 câu query chắc là do bạn ấy nghĩ giống mình lúc đầu, chia trường hợp cho việc ng` ta có chọn các option ko =)), vd có 3 option thôi thì có 2^3 là 8 trường hợp ^^
Bài liên quan
0