Bài 17: Xử lý truy vấn nhiều điều kiện với PHP

Mình đã từng teamviewer với rất nhiều bạn và sửa code cho họ và mình cũng hơi chán khi nhìn những dòng code đó, tuy nhiên trước đây mình cũng từng như vậy cho nên mình thông cảm được. Chính vì vậy trong bài này mình sẽ trình bày một cách code giúp bạn quản lý tốt hơn bằng cách kết hợp mảngcâu lệnh if else trong php.

1. Đặt vấn đề truy vấn nhiều điện kiện

Giả sử mình có một table customer với cách thông số email | fullname | phone | address, lúc này hệ thống quản lý của mình cần có chức năng lọc những field đó để tìm khách hàng của họ. Như vậy ta phải viết câu truy vấn với điều kiện where là 10 trường hợp.

  • email
  • fullname
  • phone
  • address
  • email | fullname
  • email | phone
  • email | address
  • fullname | phone
  • fullname | address
  • phone | address
  • email | fullname | phone
  • email | fullname | address
  • fullname | phone | address
  • email | fullname | phone | address

Rất phiền phức phải không nào, thông thường ta sẽ viết kiểm tra điều kiện người dùng có nhập hay không rồi thêm điều kiện where vào, bây giờ ta cũng làm như vậy thôi nhưng sử dụng mảng để nhìn đẹp hơn.

2. Xử lý truy vấn nhiều điều kiện với php

Mình sẽ thực hiện các bước như sau:

Bước 1: Lấy các tham số cần lọc

1
2
3
4
5
6
7
// Lấy thông tin lọc
$filter  = array(
    'email'     => isset($_GET['email']) ? mysql_escape_string($_GET['email']) : false,
    'phone'     => isset($_GET['email']) ? mysql_escape_string($_GET['phone']) : false,
    'address'   => isset($_GET['email']) ? mysql_escape_string($_GET['address']) : false,
    'fullname'  => isset($_GET['email']) ? mysql_escape_string($_GET['fullname']) : false
);
Bước 2: Xử lý điều kiện lọc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Biến lưu trữ lọc
$where = array();
 
// Nếu có chọn lọc thì thêm điều kiện vào mảng
if ($filter['email']){
    $where[] = "email = '{$filter['email']}'";
}
 
if ($filter['phone']){
    $where[] = "phone = '{$filter['phone']}'";
}
 
if ($filter['address']){
    $where[] = "address = '{$filter['address']}'";
}
 
if ($filter['fullname']){
    $where[] = "fullname = '{$filter['fullname']}'";
}
Bước 3: Câu truy vấn cuối cùng

1
2
3
4
5
// Câu truy vấn cuối cùng
$sql = 'SELECT * FROM customer';
if ($where){
    $sql .= ' WHERE '.implode(' AND ', $where);
}
Có lẽ bạn thấy code dài đúng không nào? Nhưng không dài lắm đâu vì bạn sẽ quản lý code rất dễ dàng. Nếu muốn bạn có thể áp dụng nó vào bài viết thư viện xử lý database.

3. Lời kết

Bài này mình làm tiền đề để các bài sau mình hướng dẫn các bạn viết thư viện  xử lý database nâng cao và chỉ gọi, truyền tham số lọc vào là có kết quả tương ứng thôi, giống như Wordpress vậy đó.

Nguồn: freetuts.net