Xóa nhiều bản ghi trong mysql



Câu lệnh DELETE trong MySQL được sử dụng để xóa các bản ghi hiện có từ một bảng.

Bạn có thể sử dụng mệnh đề WHERE với truy vấn DELETE để xóa các hàng đã chọn, nếu không tất cả các bản ghi sẽ bị xóa.

Cú pháp

Cú pháp cơ bản của truy vấn DELETE với mệnh đề WHERE như sau:

DELETE FROM table_name
WHERE [condition];

Bạn có thể kết hợp N điều kiện bằng cách sử dụng các toán tử AND và OR.


Ví dụ

Hãy xem xét bảng CUSTOMERS có các bản ghi sau đây:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ha Anh   |  32 | Da Nang   |  2000.00 |
|  2 | Van Ha   |  25 | Ha Noi    |  1500.00 |
|  3 | Vu Bang  |  23 | Vinh      |  2000.00 |
|  4 | Thu Minh |  25 | Ha Noi    |  6500.00 |
|  5 | Hai An   |  27 | Ha Noi    |  8500.00 |
|  6 | Hoang    |  22 | Ha Noi    |  4500.00 |
|  7 | Binh     |  24 | Ha Noi    | 10000.00 |
+----+----------+-----+-----------+----------+

Câu lệnh trong ví dụ sau sẽ xóa một khách hàng có ID là 6.

DELETE FROM CUSTOMERS
WHERE ID = 6;

Bây giờ, bảng CUSTOMERS sẽ có các bản ghi sau đây.

Xóa nhiều bản ghi trong mysql

Nếu bạn muốn DELETE tất cả các bản ghi từ bảng CUSTOMERS, bạn không cần phải sử dụng mệnh đề WHERE và truy vấn DELETE sẽ như sau:

Bây giờ, bảng CUSTOMERS sẽ không có bất kỳ bản ghi nào.

Xóa nhiều bản ghi trong mysql



Trong các ứng dụng thực tế hiện nay các Hệ quan trị nội dung website hay các hệ thống phần mềm online sẽ không thể bỏ qua chức năng cho phép người quản trị có thể thực hiện việc xóa được nhiều records trong một bảng CSDL. Bạn cư thử tưởng tượng xem nếu chúng ta cần xóa khoảng 100 records mà bây giờ chúng ta sẽ phải thao tác xóa từng cái một. Công việc đó thật nhàm chán và mất thời gian đúng không?

DEMO xóa nhiều reocords

Xóa nhiều bản ghi trong mysql

Thì việc đầu tiên là người dùng phải tích chọn các records cần xóa(Tích vào các dấu checkbox) và sau đó người dùng click vào nút Xóa chọn. Để thực hiện chức năng này mình có sử dụng JQuery để xử lý sự kiện liên quan tới Javascipt.

1. Javascript

Việc đầu tiên là bạn phải chèn vào thư viện JQuery.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

2. File config_db.php.

File này sẽ chứa các thông tin và kết nối tới CSDL.

<?php 
	define("DB_HOST", "localhost");
	/** The name of the database for demo */
	define("DB_NAME", "MySQLDemo");
	/** MySQL database username */
	define("DB_USER", "root");
	/** MySQL database password */
	define("DB_PASS", "");
	
	// Kết nối tới CSDL
	$dbconn = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
	if(!$dbconn){
		die("Can't connect database ".mysqli_connect_error());
	}
	//@mysqli_query("SET NAMES 'utf8'");
?>

3. File index.php

File này sẽ hiển thị một danh sách tất cả các bản ghi có trong bảng News của CSDL.

Một số lưu ý:

  • Nút checkbox tất cả cho phép người dùng chọn tất cả các record hiển thị trong danh sách.id=check_all
  • Cột đầu tiên của mỗi dòng sẽ là chứa một checkbox để cho phép người dùng tick chọn các records cần xóa class=checkitem.
  • Button Xóa chọn có thuộc tính value="delete_all" và name='submit'. Mặc định button này ở trạng thái ẩn khi được chọn một trong số các records cần xóa button này mới được hiển thị.

Chúng ta sẽ có mã Javascript xử lý sự kiện khi người dùng tick vào checkbox.

<script type="text/javascript">
	$(function(){
		/* Check/bỏ chek hết tất cả các records */
		$(document).on('change','#check_all', function(ev){
			$('.checkitem').prop('checked', this.checked).trigger('change');
		});
		/* Check/bỏ chek từng records */
		$(document).on('change','.checkitem', function(ev){
			var _dem = 0;
			var _checked = 1;
			/* Duyệt tất cả các checkitem */
			$('.checkitem').each(function(){
				if($(this).is(':checked')){
					_dem ++;
				}else{
					_checked = 0;
				}
			});
			$('#check_all').prop('checked', _checked);
			if(_dem > 0){
				// Hiện nút xóa chọn
				$('button[name=submmit]').show();
			}else{
				// Ẩn nút xóa chọn
				$('button[name=submmit]').hide();
			}
		});
	});
</script>

Hiển thị danh sách.

Lưu ý: Chúng ta sẽ bao danh sách bằng một cái thẻ <form /> có action dẫn tới file sẽ xử lý xóa dữ liệu. Thuộc tính name của checkbox phải là một mảng có value là ID của các record.

<?php 
	require_once(dirname(__FILE__).'/config_db.php');
	// Câu lệnh truy vấn
	$sql = "SELECT * FROM News ORDER BY order_no ASC";
	$result = mysqli_query($dbconn, $sql);
	$totalRecord = mysqli_num_rows($result);
	// Danh sách
    if($totalRecord > 0){ ?>
    <form method="post" action="/demo/php-mysql-delete-multiple/delete.php">
        <table class="tbl-grid" cellpadding="0" cellspacing="0" awidth="100%">
            <thead>
                <th class="gridheader" awidth="5%" style="text-align:center"><input id="check_all" type="checkbox" /></th>
                <th class="gridheader" awidth="5%" style="text-align:center">No.</th>
                <th class="gridheader">Tiêu đề</th>
                <th class="gridheader">Ngày đăng</th>
            </thead>
            <?php while($row = mysqli_fetch_assoc($result)){ ?>
            <tr>
                <td align="center"><input class="checkitem" type="checkbox" name="id[]" value="<?php echo $row['id'] ?>" /></td>
                <td align="center"><?php echo $row['id'] ?></td>
                <td><?php echo html_entity_decode($row['title'],ENT_COMPAT,'UTF-8'); ?></td>
                <td><?php echo date('l, d/m/Y',$row['create_at']); ?></td>
            </tr>	
            <?php } ?>
            <tfoot>
                <td colspan="5">
                    <button type="submit" class="btn" name="submmit" value="delete_all" style="display:none">Xóa chọn</button>
                </td>
            </tfoot>
        </table>
    </form>
<?php } ?>

4. File delete.php

Sau khi người dùng đã tick chọn một danh sách các records cần xóa và nhấn vào nút Xóa chọn.

// File thực hiện chức năng xóa bản tin
// Nhận vào một danh sách POST[ID]

require_once(dirname(__FILE__).'/config_db.php');
// Xóa chọn nhiều record
if(isset($_POST['submmit']) && $_POST['submmit']=='delete_all'){
	$sql = "DELETE FROM News WHERE id IN (".implode(',',$_POST['id']).")";
	if(mysqli_query($dbconn, $sql)===TRUE){
		header('Location:/demo/php-mysql-delete-multiple/?t='.time().'&message=success');
		exit();	
	}else{
		echo "Lỗi :".mysqli_error($dbconn);
		die();
	}
}

5 Tổng kết

Qua bài viết này bạn đã biết cách làm sao có thể xóa được nhiều bản ghi rồi nhé. Nếu có thời gian mình sẽ làm mộtbài viết Xóa nhiều bản ghi bằng PHP kết hợp với JQuery ajax.

Tải thêm tài liệu liên quan đến bài viết Xóa nhiều bản ghi trong mysql