Xác thực mục nhập trùng lặp trong PHP

Nói chung, các bảng hoặc tập hợp kết quả đôi khi chứa các bản ghi trùng lặp. Hầu hết thời gian nó được cho phép nhưng đôi khi bắt buộc phải dừng các bản ghi trùng lặp. Yêu cầu xác định các bản ghi trùng lặp và xóa chúng khỏi bảng. Chương này sẽ mô tả cách ngăn chặn sự xuất hiện của các bản ghi trùng lặp trong một bảng và cách loại bỏ các bản ghi trùng lặp đã tồn tại

Ngăn chặn sự trùng lặp xảy ra trong một bảng

Bạn có thể sử dụng KHÓA CHÍNH hoặc Chỉ mục DUY NHẤT trên bảng có các trường thích hợp để ngăn các bản ghi trùng lặp

Hãy để chúng tôi lấy một ví dụ – Bảng sau đây không chứa chỉ mục hoặc khóa chính như vậy, vì vậy nó sẽ cho phép các bản ghi trùng lặp cho first_name và last_name

CREATE TABLE person_tbl [
   first_name CHAR[20],
   last_name CHAR[20],
   sex CHAR[10]
];

Để ngăn nhiều bản ghi có cùng giá trị họ và tên được tạo trong bảng này, hãy thêm KHÓA CHÍNH vào định nghĩa của nó. Khi bạn thực hiện việc này, cũng cần phải khai báo các cột được lập chỉ mục là KHÔNG NULL, vì KHÓA CHÍNH không cho phép giá trị NULL -

CREATE TABLE person_tbl [
   first_name CHAR[20] NOT NULL,
   last_name CHAR[20] NOT NULL,
   sex CHAR[10],
   PRIMARY KEY [last_name, first_name]
];

Sự hiện diện của một chỉ mục duy nhất trong một bảng thường gây ra lỗi nếu bạn chèn một bản ghi vào bảng sao chép một bản ghi hiện có trong cột hoặc các cột xác định chỉ mục

Sử dụng lệnh INSERT IGNORE thay vì lệnh INSERT. Nếu một bản ghi không trùng lặp với một bản ghi hiện có, thì MySQL sẽ chèn nó như bình thường. Nếu bản ghi trùng lặp, thì từ khóa IGNORE yêu cầu MySQL loại bỏ nó một cách âm thầm mà không tạo ra lỗi

Ví dụ sau không báo lỗi và đồng thời cũng không chèn các bản ghi trùng lặp

mysql> INSERT IGNORE INTO person_tbl [last_name, first_name]
   -> VALUES[ 'Jay', 'Thomas'];
Query OK, 1 row affected [0.00 sec]

mysql> INSERT IGNORE INTO person_tbl [last_name, first_name]
   -> VALUES[ 'Jay', 'Thomas'];
Query OK, 0 rows affected [0.00 sec]

Sử dụng lệnh REPLACE thay vì lệnh INSERT. Nếu bản ghi mới, nó được chèn giống như với INSERT. Nếu trùng lặp thì bản ghi mới sẽ thay thế bản ghi cũ

mysql> REPLACE INTO person_tbl [last_name, first_name]
   -> VALUES[ 'Ajay', 'Kumar'];
Query OK, 1 row affected [0.00 sec]

mysql> REPLACE INTO person_tbl [last_name, first_name]
   -> VALUES[ 'Ajay', 'Kumar'];
Query OK, 2 rows affected [0.00 sec]

Các lệnh INSERT IGNORE và REPLACE nên được chọn theo hành vi xử lý trùng lặp mà bạn muốn thực hiện. Lệnh INSERT IGNORE giữ bộ bản ghi trùng lặp đầu tiên và loại bỏ phần còn lại. Lệnh REPLACE giữ tập hợp các bản sao cuối cùng và xóa mọi bản sao trước đó

Một cách khác để thực thi tính duy nhất là thêm một chỉ mục ĐỘC ĐÁO thay vì một KHÓA CHÍNH vào một bảng

CREATE TABLE person_tbl [
   first_name CHAR[20] NOT NULL,
   last_name CHAR[20] NOT NULL,
   sex CHAR[10]
   UNIQUE [last_name, first_name]
];

Đếm và xác định trùng lặp

Sau đây là truy vấn để đếm các bản ghi trùng lặp với first_name và last_name trong một bảng

mysql> SELECT COUNT[*] as repetitions, last_name, first_name
   -> FROM person_tbl
   -> GROUP BY last_name, first_name
   -> HAVING repetitions > 1;

Truy vấn này sẽ trả về danh sách tất cả các bản ghi trùng lặp trong bảng person_tbl. Nói chung, để xác định các bộ giá trị bị trùng lặp, hãy làm theo các bước dưới đây

  • Xác định cột nào chứa các giá trị có thể bị trùng lặp

  • Liệt kê các cột đó trong danh sách chọn cột, cùng với COUNT[*]

  • Liệt kê cả các cột trong mệnh đề GROUP BY

  • Thêm mệnh đề HAVING để loại bỏ các giá trị duy nhất bằng cách yêu cầu số lượng nhóm phải lớn hơn một

Loại bỏ các bản sao khỏi kết quả truy vấn

Bạn có thể sử dụng lệnh DISTINCT cùng với câu lệnh SELECT để tìm ra các bản ghi duy nhất có sẵn trong một bảng

mysql> SELECT DISTINCT last_name, first_name
   -> FROM person_tbl
   -> ORDER BY last_name;

Một cách thay thế cho lệnh DISTINCT là thêm mệnh đề GROUP BY đặt tên cho các cột bạn đang chọn. Điều này có tác dụng loại bỏ các giá trị trùng lặp và chỉ chọn các kết hợp giá trị duy nhất trong các cột đã chỉ định

mysql> SELECT last_name, first_name
   -> FROM person_tbl
   -> GROUP BY [last_name, first_name];

Loại bỏ các bản sao bằng cách sử dụng thay thế bảng

Nếu bạn có các bản ghi trùng lặp trong một bảng và bạn muốn xóa tất cả các bản ghi trùng lặp khỏi bảng đó, hãy làm theo quy trình dưới đây

________số 8_______

Một cách dễ dàng để loại bỏ các bản ghi trùng lặp khỏi bảng là thêm INDEX hoặc PRIMARY KEY vào bảng đó. Ngay cả khi bảng này đã có sẵn, bạn có thể sử dụng kỹ thuật này để xóa các bản ghi trùng lặp và bạn cũng sẽ an toàn trong tương lai

Làm cách nào để tránh các mục trùng lặp trong PHP?

Hàm array_unique[] loại bỏ các giá trị trùng lặp khỏi một mảng . Nếu hai hoặc nhiều giá trị mảng giống nhau, thì giá trị đầu tiên sẽ được giữ lại và giá trị còn lại sẽ bị xóa. Ghi chú. Mảng được trả về sẽ giữ loại khóa của mục mảng đầu tiên.

Làm cách nào để kiểm tra các bản sao trong PHP?

Đây là đoạn mã đang hoạt động để kiểm tra xem mảng có giá trị trùng lặp hay không. .
$arr = array['Email','Name','Something','Else','Email'];
nếu [ đếm[ $arr ]. == đếm[ array_unique[ $arr ] ] ] echo "Một số trùng lặp";

Làm cách nào để tránh tên người dùng trùng lặp trong PHP?

-- Làm cho nó trở nên độc nhất THAY ĐỔI TABLE người dùng THÊM ĐỘC ĐÁO [tên người dùng]; . Khi bạn cố gắng chèn cùng một cái thì sẽ xảy ra lỗi.

Các phương pháp để ngăn chặn các mục trùng lặp là gì?

Ngăn chặn các mục nhập trùng lặp .
Chọn phạm vi A2. A20
Trên tab Dữ liệu, trong nhóm Công cụ Dữ liệu, bấm vào Xác thực Dữ liệu
Trong danh sách Cho phép, nhấp vào Tùy chỉnh
Trong hộp Công thức, nhập công thức hiển thị bên dưới và nhấp vào OK. .
Để kiểm tra điều này, hãy chọn ô A3 và nhấp vào Xác thực dữ liệu. .
Nhập số hóa đơn trùng lặp

Chủ Đề