Làm cách nào tôi có thể tìm kiếm nhiều từ cùng một lúc trong mysql bằng PHP?

Đối với điều này, bạn có thể sử dụng mệnh đề WHERE với nhiều LIKE. Trước tiên chúng ta hãy tạo một bảng -

mysql> create table DemoTable1536
   -> [
   -> Sentence text
   -> ];
Query OK, 0 rows affected [0.51 sec]

Chèn một số bản ghi vào bảng bằng lệnh chèn -

mysql> insert into DemoTable1536 values['I like MySQL database.'];
Query OK, 1 row affected [0.14 sec]
mysql> insert into DemoTable1536 values['Java is an Object Oriented Programming Language'];
Query OK, 1 row affected [0.30 sec]
mysql> insert into DemoTable1536 values['I only like data structure'];
Query OK, 1 row affected [0.21 sec]
mysql> insert into DemoTable1536 values['MongoDB is NoSQL database'];
Query OK, 1 row affected [0.46 sec]

Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select -

mysql> select * from DemoTable1536;

Điều này sẽ tạo ra đầu ra sau -

+--------------------------------------------------+
| Sentence                                         |
+--------------------------------------------------+
| I like MySQL database.                           |
| Java is an Object Oriented Programming Language  |
| I only like data structure                       |
| MongoDB is NoSQL database                        |
+--------------------------------------------------+
4 rows in set [0.00 sec]

Sau đây là truy vấn để tìm kiếm nhiều từ -

mysql> select * from DemoTable1536
   -> where [ Sentence like '%like%'] or [Sentence like '%database%'] or [Sentence like '%data%'];

Điều này sẽ tạo ra đầu ra sau -

+----------------------------+
| Sentence                   |
+----------------------------+
| I like MySQL database.     |
| I only like data structure |
| MongoDB is NoSQL database  |
+----------------------------+
3 rows in set [0.00 sec]

Vì vậy, về mặt kỹ thuật, những gì chúng ta sẽ làm ở đây là tạo một công cụ tìm kiếm đơn giản. Thứ gì đó có thể chia nhỏ từ khóa thành nhiều từ khóa và hiển thị nhiều kết quả phù hợp với từ khóa. Có ý nghĩa?

Trong hướng dẫn này, chúng tôi sẽ giả định rằng bạn đã biết những điều cơ bản về PHP và MySQL và bạn có một số kinh nghiệm với nó

Giải pháp

Để tìm kiếm nhiều từ khóa và nhận được nhiều kết quả, chúng ta cần gọi toán tử LIKE trong MySQL để nhận được nhiều kết quả và hàm phát nổ trong PHP để tách các từ khóa trong cụm từ tìm kiếm. Chúng tôi cũng có thể phải làm sạch cụm từ tìm kiếm của mình để có kết quả tốt hơn nữa

Giả sử chúng ta có một cơ sở dữ liệu có tên là “testdb” với một bảng có tên là các liên kết và một cột có tên là search_item, và chúng ta sẽ tìm kiếm cơ sở dữ liệu đó cho nhiều từ khóa. Trong cột search_item, chúng ta có các mục “PHP”, “MySQL”, “Apple”, “Windows”, “PHPMyAdmin”

Bây giờ, hãy đưa cụm từ tìm kiếm của chúng ta vào $_POST[‘keywords’]. Lưu ý rằng chúng tôi phải luôn thoát khỏi cụm từ tìm kiếm của mình. Ngoài ra, chúng tôi có thể phải làm thêm một số vệ sinh. Đối với hướng dẫn này, chúng tôi sẽ xóa nhiều hơn một khoảng trắng, bất kỳ tab nào hoặc một dòng mới [ngắt dòng]. Điều này đảm bảo rằng cụm từ tìm kiếm của chúng tôi sẽ không có thêm bất kỳ khoảng trắng, tab hoặc dòng mới nào có thể làm hỏng kết quả của chúng tôi. Ngoài ra, chúng tôi có thể phải cắt bớt để tất cả các khoảng trắng trước và sau sẽ bị xóa khỏi chuỗi tìm kiếm của chúng tôi. Để làm điều này

$queried = mysqli_real_escape_string[$conn, preg_replace['/\s+/', ' ',trim[$_POST['keywords']]]];

mysqli_real_escape_string sẽ thoát các ký tự đặc biệt trong chuỗi để sử dụng trong câu lệnh SQL. Chẳng hạn, chúng tôi có một ', sẽ được chuyển đổi thành \'. Lý do cho điều này là trong truy vấn MySQL, chúng tôi sử dụng các ký tự đặc biệt như ‘. Việc có một ‘ khác trong truy vấn có thể gây ra sự cố vì nó sẽ hủy một số tham số đã mở đang sử dụng ‘, do đó phá vỡ truy vấn của chúng tôi và gây ra lỗi

preg_replace được sử dụng ở đây để thay thế một số giá trị không mong muốn trong truy vấn bằng biểu thức chính quy [biểu thức chính quy]. Lưu ý rằng trong mã của chúng tôi, chúng tôi đang sử dụng \s+, có nghĩa là khoảng trắng [dấu cách, tab hoặc dòng mới] theo sau là một hoặc nhiều khoảng trắng. Mã của chúng tôi có nghĩa là thay thế hai hoặc nhiều khoảng trắng bằng một khoảng trắng. Điều tương tự sẽ được thực hiện với một tab hoặc một dòng mới

Bây giờ, chúng tôi đã làm sạch truy vấn của mình, chúng tôi sẽ làm sạch thêm truy vấn bằng cách chuyển đổi dấu phẩy thành dấu cách. Nếu không, dấu phẩy sẽ được đưa vào truy vấn của chúng tôi và điều này có thể ảnh hưởng đến kết quả. Để cho phép truy vấn của chúng tôi hoạt động với dấu phẩy, chúng tôi tạo các điều kiện này

if[strpos[$queried,", "]]{
	$query = str_replace[", "," ",$queried];
	$keys = explode[" ",$query];
} else if[strpos[$queried,","]]{
	$query = str_replace[","," ",$queried];
	$keys = explode[" ",$query];	
} else {
	$keys = explode[" ",$queried];
}

str_pos tìm vị trí xuất hiện đầu tiên của chuỗi con trong chuỗi. Nếu nó tìm thấy sự xuất hiện, nó sẽ trả về giá trị true khác false. Chúng tôi đang sử dụng chức năng này để tìm kiếm dấu phẩy và biến thể khác của nó — dấu phẩy có dấu cách trong cụm từ tìm kiếm. Chúng tôi bắt đầu tìm kiếm điều kiện bằng dấu phẩy có dấu cách thay vì chỉ dấu phẩy vì nếu chúng tôi chỉ bắt đầu bằng dấu phẩy và truy vấn của chúng tôi có dấu phẩy với dấu cách, nó sẽ đáp ứng điều kiện chỉ có dấu phẩy vì truy vấn dấu phẩy có dấu cách cũng có dấu phẩy. Nếu điều kiện được đáp ứng thì điều kiện thứ hai và điều kiện khác sẽ bị bỏ qua khiến chúng ta chỉ thực hiện một phương thức cho dấu phẩy, khoảng trắng sẽ không được xử lý bởi phương thức này. Nhưng nếu chúng ta thực hiện dấu phẩy với dấu cách trong điều kiện đầu tiên, thì nó phải tìm dấu phẩy với dấu cách và chỉ dấu phẩy sẽ không đủ. Vì vậy, nếu chúng tôi đang tìm kiếm một truy vấn chỉ bao gồm một dấu phẩy, thì điều kiện đầu tiên sẽ không thành công và chuyển sang điều kiện thứ hai để xử lý khác

str_replace thay thế tất cả các lần xuất hiện của chuỗi tìm kiếm bằng chuỗi thay thế. Chúng tôi đang sử dụng điều này để tìm kiếm cụm từ tìm kiếm cho dấu phẩy và chuyển đổi chúng thành dấu cách

Vì vậy, điều kiện của chúng tôi diễn ra như sau, nếu chúng tôi tìm thấy dấu phẩy có dấu cách [, ] thì chúng tôi thực hiện quy trình thay thế dấu phẩy bằng dấu cách bằng khoảng trắng trong cụm từ tìm kiếm. Sau đó, cụm từ tìm kiếm của chúng tôi sẽ được phân tách bằng cách phát nổ thành nhiều giá trị bằng cách sử dụng khoảng trắng làm dấu phân cách [gợi ý của chúng tôi], vì vậy mỗi khi PHP gặp khoảng trắng ở cuối từ, nó sẽ tách từ đó khỏi các từ khác. Khác nếu điều kiện đầu tiên không được đáp ứng thì nó sẽ tìm kiếm dấu phẩy trong cụm từ tìm kiếm. Nếu tìm thấy, PHP sẽ thay thế tất cả các dấu phẩy bằng khoảng trắng, sau đó tách các từ bằng khoảng trắng làm dấu phân cách. Mặt khác, nó sẽ chỉ tách cụm từ tìm kiếm thành một số từ khóa bằng cách sử dụng khoảng trắng làm dấu phân cách

Bây giờ chúng tôi đã làm sạch cụm từ tìm kiếm của mình và chia chúng thành nhiều phần, đã đến lúc thực hiện truy vấn MySQL

Lưu ý rằng tên bảng cơ sở dữ liệu của chúng tôi là các liên kết và cột của chúng tôi để tìm kiếm là search_item. Để tìm kiếm search_item cho các từ khóa

________số 8

Truy vấn có nghĩa là chọn tất cả các cột từ liên kết bảng trong đó cột search_item có thứ gì đó giống như các mục tìm kiếm của chúng tôi. LIKE cho phép chúng tôi tìm kiếm thứ gì đó giống với từ khóa hơn là tìm từ khóa chính xác. Cũng lưu ý rằng % phải được bao gồm. Toán tử này được gọi là mô đun. Trong truy vấn, nó sẽ tìm kiếm từ khóa hoặc từ khóa + bất cứ thứ gì được gắn vào từ khóa. Ví dụ: chúng tôi có PHPMyAdmin trong cơ sở dữ liệu và chúng tôi tìm kiếm PHP, mô-đun sẽ tìm kiếm bất kỳ từ nào có “PHP” được đính kèm trong đó và do đó, nó sẽ trả về PHPMyAdmin vì nó có từ PHP trong đó

truy vấn của chúng tôi, tuy nhiên, là không đủ. Chúng tôi không có chỗ cho các từ khóa khác [giả sử cụm từ tìm kiếm của bạn có nhiều hơn một]. Vì vậy, chúng tôi cần một điều kiện khác để xử lý các từ khóa và đưa chúng vào truy vấn

Vì nó dành cho mọi từ khóa nên chúng ta phải tạo một vòng lặp. Đối với cái này, hãy sử dụng foreach

foreach[$keys as $key]{
    	$sql .= " OR search_item LIKE '%$k%' ";
}

Mã của chúng tôi ở đây có nghĩa là đối với mỗi từ khóa [$keys], nó sẽ được coi là một thực thể duy nhất [$key] và với mỗi khóa đó, hãy nối biến $sql chứa một truy vấn sql bổ sung tìm kiếm search_item cho từ khóa đó . Vòng lặp này sẽ tạo bao nhiêu điều kiện bổ sung và gắn nó vào truy vấn tìm kiếm MySQL chính của chúng tôi miễn là có các từ khóa phụ. Tuy nhiên, hãy cẩn thận, bạn có thể phải kiểm tra độ dài của cụm từ tìm kiếm, nếu không, nếu truy vấn trở nên quá lớn, nó có thể làm hỏng cơ sở dữ liệu. Đối với điều này, tốt nhất là giới hạn các ký tự có thể chứa trong thanh tìm kiếm

Sau đó, đã đến lúc yêu cầu truy vấn

mysql> insert into DemoTable1536 values['I like MySQL database.'];
Query OK, 1 row affected [0.14 sec]
mysql> insert into DemoTable1536 values['Java is an Object Oriented Programming Language'];
Query OK, 1 row affected [0.30 sec]
mysql> insert into DemoTable1536 values['I only like data structure'];
Query OK, 1 row affected [0.21 sec]
mysql> insert into DemoTable1536 values['MongoDB is NoSQL database'];
Query OK, 1 row affected [0.46 sec]
0

Nhân tiện, biến $conn của chúng tôi phải chứa thông tin đăng nhập cơ sở dữ liệu của chúng tôi. Sau đó, $sql là truy vấn của chúng tôi

Cuối cùng, để xuất kết quả, chúng ta cần tạo một vòng lặp khác. Lần này, chúng tôi sẽ sử dụng while để hiển thị tất cả các kết quả phù hợp mà truy vấn tìm kiếm của chúng tôi đã tìm thấy

mysql> insert into DemoTable1536 values['I like MySQL database.'];
Query OK, 1 row affected [0.14 sec]
mysql> insert into DemoTable1536 values['Java is an Object Oriented Programming Language'];
Query OK, 1 row affected [0.30 sec]
mysql> insert into DemoTable1536 values['I only like data structure'];
Query OK, 1 row affected [0.21 sec]
mysql> insert into DemoTable1536 values['MongoDB is NoSQL database'];
Query OK, 1 row affected [0.46 sec]
1

Mã có nghĩa là trong khi có đầu ra, nó sẽ in hoặc hiển thị kết quả trong trang của chúng tôi. mysqli_fetch_assoc tìm nạp một hàng kết quả dưới dạng một mảng kết hợp. Tóm lại, nó sẽ liên kết kết quả của chúng ta với tên tiêu đề cột để mảng của chúng ta có thể được gọi theo tên cột. Vì tên cột của chúng tôi là mục tìm kiếm và biến vùng chứa của chúng tôi là $resulti, nên chúng tôi có thể sử dụng $result[‘search item’] để hiển thị nội dung đầu ra của chúng tôi

Mã hoàn chỉnh sẽ trông giống như thế này

mysql> insert into DemoTable1536 values['I like MySQL database.'];
Query OK, 1 row affected [0.14 sec]
mysql> insert into DemoTable1536 values['Java is an Object Oriented Programming Language'];
Query OK, 1 row affected [0.30 sec]
mysql> insert into DemoTable1536 values['I only like data structure'];
Query OK, 1 row affected [0.21 sec]
mysql> insert into DemoTable1536 values['MongoDB is NoSQL database'];
Query OK, 1 row affected [0.46 sec]
2

Đây là một minh chứng về cách mã của chúng tôi hoạt động

Đóng nhận xét

Hướng dẫn này cũng có thể được tìm thấy trong Stackoverflow. Tuy nhiên, điều đó đã được thực hiện từ nhiều năm trước và hồi đó họ đang sử dụng chức năng mysql thay vì mysqli. Chúng tôi đã phát triển mã và cập nhật nó để nó tương thích với phiên bản PHP mới nhất — PHP 7. 1 kể từ khi viết bài này

Làm cách nào để triển khai nhiều bộ lọc tìm kiếm trong php?

một cách để triển khai là kiểm tra từng bộ lọc như. if [isset[$_GET['name'] && isset[$_GET['city']]] { // thực hiện AND cho hai cái này } elseif[isset[$_GET['name'] && [isset[$_GET[ .

Làm cách nào để tạo thanh tìm kiếm trong php và MySQL?

Thiết lập cơ sở dữ liệu . Nhấp vào “Mới”. Tạo một cơ sở dữ liệu có tên là “autocomplete” [hoặc bất cứ thứ gì bạn muốn gọi nó]. Sao chép và dán truy vấn sau để tạo Bảng [tìm kiếm], Tên cột [Id, Name], sau đó chèn dữ liệu giả

Làm cách nào tôi có thể lấy dữ liệu cụ thể từ MySQL trong php?

Dữ liệu có thể được tìm nạp từ các bảng MySQL bằng cách thực thi câu lệnh SQL SELECT thông qua hàm mysql_query của PHP . Bạn có một số tùy chọn để lấy dữ liệu từ MySQL. Tùy chọn được sử dụng thường xuyên nhất là sử dụng hàm mysql_fetch_array[]. Hàm này trả về hàng dưới dạng một mảng kết hợp, một mảng số hoặc cả hai.

Làm cách nào để viết truy vấn tìm kiếm trong MySQL?

Trong lưới tìm kiếm, hãy chọn các bảng và chế độ xem quan tâm hoặc bỏ chọn tất cả chúng. Để thu hẹp phạm vi dữ liệu tìm kiếm MySQL, hãy chọn các hộp kiểm bảng, dạng xem, số, loại văn bản và cột ngày. Để bắt đầu tìm kiếm, hãy nhấp vào nút Tìm hoặc nhấn phím Enter từ bàn phím .

Chủ Đề