1. Mệnh đề Where trong MySQL là gì?

Trong các bài học trước thì ta đã biết được cách sử dụng câu lệnh Select trong SQL để lấy dữ liệu trong bảng MySQL. Ở đây ta có thể sử dụng mệnh đề Where là một mệnh đề điều kiện để lọc các kết quả thu được. Mệnh đề WHERE được sử dụng để trích xuất chỉ những hồ sơ mà đáp ứng một điều kiện nhất định. Sử dụng mệnh đề Where ta có thể xác định một tiêu chuẩn lựa chọn để chọn các bản ghi cần thiết từ một bảng.

Cú pháp cơ bản của một mệnh đề Where:

SELECT truong1, truong2,...truongN FROM ten_bang
[WHERE dieuKien1 [AND [OR]] dieuKien2.....

Ta có thể xác định bất kỳ điều kiện nào bởi sử dụng mệnh đề Where. Cùng với đó là việc xác định nhiều hơn một điều kiện bởi sử dụng các toán tử AND hoặc OR. Trong SQL, một điều kiện là một biểu thức đánh giá đúng, sai hoặc không xác định. Một mệnh đề Where có thể được sử dụng cùng với lệnh DELETE hoặc UPDATE trong SQL để xác định một điều kiện, những hàng cần cập nhật hoặc xóa.

Mệnh đề WHERE làm việc giống như một điều kiện if trong bất kỳ ngôn ngữ lập trình nào. Mệnh đề này được sử dụng để so sánh giá trị đã cho với giá trị trường có sẵn trong bảng MySQL. Nếu giá trị đã cho bên ngoài là bằng với giá trị trường có sẵn trong bảng MySQL, thì nó sẽ trả về hàng đó.

Mệnh đề WHERE là hữu ích khi bạn muốn lấy các hàng đã được lựa chọn từ một bảng, đặc biệt khi bạn sử dụng JOIN trong MySQL. Các JOIN sẽ được trình bày trong chương khác. Sử dụng Primary Key cũng là thói quen phổ biến để tìm kiếm các bản ghi để giúp việc tìm kiếm này nhanh hơn.

Nếu điều kiện đã cho không so khớp với bất kỳ bản ghi nào trong bảng, thì truy vấn sẽ không trả về bất kỳ hàng nào.

Dưới đây mình sẽ đưa ra những toán tử có thể được sử dụng với mệnh đề Where. Giả sử trường A giữ 10 và trường B giữ 20 ta có bảng sau:

Toán tử Miêu tả Ví dụ
= Kiểm tra xem 2 giá trị có cân bằng không, nếu có thì điều kiện sẽ trở thành True (A = B) là không đúng
-> trả về False
!= Kiểm tra xem giá trị của hai toán hạng là cân bằng hay là không, nếu không cân bằng thì điều kiện trở thành true (A != B) là đúng
-> trả về True
> Kiểm tra xem giá trị của toán hạng trái có lớn hơn giá trị của toán hạng phải không, nếu có thì điều kiện trở thành true (A > B) là không đúng
-> trả về False
< Kiểm tra xem giá trị của toán hạng trái có nhỏ hơn giá trị của toán hạng phải không, nếu có thì điều kiện trở thành true (A < B) là đúng

-> trả về True

>= Kiểm tra xem giá trị của toán hạng trái có lớn hơn hoặc bằng giá trị của toán hạng phải không, nếu có thì điều kiện trở thành true (A >= B) là không đúng

-> trả về False

<= Kiểm tra xem giá trị của toán hạng trái có nhỏ hơn hoặc bằng giá trị của toán hạng phải không, nếu có thì điều kiện trở thành true (A <= B) là đúng

-> trả về True

2. Sử dụng mệnh đề Where với MySQLi

Chúng ta hãy tạo một truy vấn SQL bằng cách sử dụng mệnh đề WHERE trong câu lệnh SELECT, sau đó chúng ta sẽ thực hiện truy vấn này thông qua việc chuyển nó đến hàm mysqli_query() của PHP để lấy dữ liệu được lọc. Chúng ta có một bảng person bên trong cơ sở dữ liệu db_lttd có các bản ghi sau:

Id First_name Last_name Email
1 Thành Nguyễn Thanh@gmail.com
2 Nam Chu Nam@gmail.com
3 Sơn Phùng Son@gmail.com
4 Lập trình Từ đầu Laptrinhtudau.com

2.1. Sử dụng mệnh đề Where với MySQLi hướng thủ tục

<?php
/* Cố gắng kết nối MySQL Servwer. Giả sử bạn đang chạy MySQL
server với thiết lập mặc định (user 'root' và không có mật khẩu) */
$link = mysqli_connect("localhost", "root", "", "db_lttd"); 
// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
} 
// Cố gắng thực hiện truy vấn
$sql = "SELECT * FROM persons WHERE first_name='Thành Nguyễn'";
if($result = mysqli_query($link, $sql)){
    if(mysqli_num_rows($result) > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = mysqli_fetch_array($result)){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        mysqli_free_result($result);
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} else{
    echo "ERROR: Không thể thực thi $sql. " . mysqli_error($link);
} 
// Đóng kết nối
mysqli_close($link);
?>

2.2. Sử dụng mệnh đề Where với MySQLi hướng đối tượng

<?php
/* Cố gắng kết nối MySQL Servwer. Giả sử bạn đang chạy MySQL
server với thiết lập mặc định (user 'root' và không có mật khẩu) */
$mysqli = new mysqli("localhost", "root", "", "db_lttd");
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
 // Cố gắng thực thi truy vấn
$sql = "SELECT * FROM persons WHERE first_name='Thành Nguyễn'";
if($result = $mysqli->query($sql)){
    if($result->num_rows > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch_array()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        $result->free();
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} else{
    echo "ERROR: Không thể thực thi $sql. " . $mysqli->error;
}
// Đóng kết nối
$mysqli->close();
?>

Đầu tiên, chúng tôi thiết lập truy vấn SQL chọn các cột id, họ và tên từ bảng. Dòng mã tiếp theo chạy truy vấn và đặt dữ liệu kết quả vào một biến được gọi là $result. Sau đó, function num_rows() kiểm tra nếu có nhiều hơn 0 hàng được trả về. Nếu có nhiều hơn 0 hàng được trả về, hàm fetch_assoc() sẽ đặt tất cả kết quả vào một mảng kết hợp mà chúng ta có thể lặp lại. Các vòng lặp while() qua tập hợp kết quả và kết quả đầu ra dữ liệu từ các id, firstname và lastname.

3. Sử dụng mệnh đề Where với PDO

Ở đây ta sẽ chọn các cột và hiển thị nó trong bảng HTML

<?php
/* Cố gắng kết nối MySQL Servwer. Giả sử bạn đang chạy MySQL
server với thiết lập mặc định (user 'root' và không có mật khẩu) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=db_lttd", "root", "");
    // Thiết lập chế độ PDO error thành Ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
} 
// Cố gắng thực thi truy vấn
try{
    $sql = "SELECT * FROM persons WHERE first_name='Thành Nguyễn'";  
    $result = $pdo->query($sql);
    if($result->rowCount() > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        unset($result);
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} catch(PDOException $e){
    die("ERROR: Không thể thực thi $sql. " . $e->getMessage());
} 
// Đóng kết nối
unset($pdo);
?>