1. Sắp xếp dữ liệu kết quả
Trong bài này chúng ta xem cách sử dụng của một từ khóa (mệnh đề) nữa của câu lệnh Select, đó là: ORDER BY. Với từ khóa này, dữ liệu kết quả của câu lệnh Select sẽ được sắp xếp theo chiều tăng dẫn hoặc giảm dần của một, hoặc nhiều, trường (field) được chỉ định.
Cú pháp lệnh:
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
Tác dụng: Các record trong kết quả trả về của lệnh Select sẽ được sắp xếp theo chiều tăng dần ([ASC]: Default) hoặc giảm dần ([DESC]) của dữ liệu ở field1, hoặc field1 rồi đến field2,… (sắp xếp dựa vào dữ liệu từ nhiều field).
Sử dụng từ khóa ORDER BY tại dấu nhắc mysql>:
Ví dụ:
root@ubuntu# mysql -u root -p password;
Enter password:*******
mysql> use HSCB;
Database changed
mysql> SELECT * from lylich ORDER BY TenCB ASC
….
mysql>
Lệnh Select này được sử dụng để, in ra tất cả các record trong table lylich, của cơ sở dữ liệu HSCB, theo thứ tự tăng dần của trường TenCB (tên cán bộ).
Sử dụng từ khóa ORDER BY trong script PHP:
Việc sử dụng từ khóa ORDER BY trong các hàm PHP mysql_query() và mysql_fetch_array() là hoàn toàn tương tự như các trường hợp khác. Mọi thứ đều chỉ khác ở câu lệnh Select.
Ví dụ:
Đoạn code PHP sau đây tác động vào table tutorial_tbl của cơ sở dữ liệu TUTORIALS.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'a123456789z';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
If (!$conn)
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl ORDER BY tutorial_author DESC';
//------------------------------------------
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
If (!$retval)
{
die('Could not get data: ' . mysql_error());
}
//-----------------------------------------------
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo "Tutorial ID :{$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
Đoạn code này được sử dụng để in ra các record trong table tutorial_tbl theo thứ tự giảm dần (DESC) của trường tutorial_author (ORDER BY tutorial_author DESC).
2. Điều khiển các giá trị NULL
Đặt vấn đề:
Việc sử dụng lệnh câu lệnh SQL Select với mệnh đề Where … Like để chọn ra các record, mà giá trị tại một, hoặc nhiều, field của nó thỏa điều kiện nào đó đã trở nên đơn giản. Nhưng khi biểu thức điều kiện sau Where liên quan đến một giá trị NULL, như so sánh giá trị tại một field với giá trị NULL, thì vấn đề không còn đơn giản nữa.
MySQL cung cấp 3 toán tử để làm việc với các giá trị NULL:
- IS NULL: Trả về True nếu giá trị field là NULL.
- IS NOT NULL: Trả về True nếu giá trị field là không NULL.
- <=>: Đây là toán tử so sánh giá trị, nó trả về giá trị True khi hai phần tử so sánh đều là giá trị NULL.
Các điều kiện liên quan đến giá trị NULL là đặc biệt. Ta không thể sử dụng = NULL hoặc = !NULL để tìm ra các giá trị NULL trong các field. Trong trường hợp này ta buộc phải sử dụng các toán tử ở trên.
Sử dụng các giá trị NULL tại dấu nhắc mysql>:
Ví dụ 1:
mysql> SELECT * FROM tcount_tbl
-> WHERE tutorial_count = NULL;
Empty set (0.00 sec)
mysql> SELECT * FROM tcount_tbl
-> WHERE tutorial_count != NULL;
Empty set (0.01 sec)
mysql>
Hai câu lệnh trên đều không thể tìm ra các record mà trường tutorial_count nhận giá trị NULL hoặc không NULL, cho dù trong thực tế là có tồn tại các record này.
Ví dụ 2:
Hai câu lệnh sau giúp sửa sai cho hai câu lệnh trên.
mysql> SELECT * FROM tcount_tbl
-> WHERE tutorial_count IS NULL;
….
mysql> SELECT * from tcount_tbl
-> WHERE tutorial_count IS NOT NULL;
….
mysql>
Tức là, khi cần so sánh với giá trị NULL, ta thay dấu “=” bởi toán tử IS và thay dấu “!=” bởi toán tử IS NOT.
Sử dụng các giá trị NULL trong script PHP:
Ta có thể sử dụng câu lệnh điều kiện if … else để chuẩn bị các câu truy vấn dựa trên các giá trị NULL.
Ví dụ:
Ở đây vẫn sử dụng câu lệnh SQL Select để tìm record thỏa mãn điều kiện, nhưng giá trị cần so sánh của biểu thức điều kiện được truyền vào câu lệnh thông qua biến tutorial_count, mà biến này có thể nhận giá trị nào đó, hoặc nhận giá trị rỗng nên nó phải sử dụng hai câu Select cho hai trường hợp này.
Hàm isset() được sử dụng trong câu lệnh if … else để cung cấp cho hàm mysql_query() một trong hai câu lệnh sql, phụ thuộc vào biến tutorial_count là chứa giá trị bất kỳ (WHERE tutorial_count= $tutorial_count) hay không chứa bất kỳ giá trị nào (WHERE tutorial_countIS $tutorial_count).
--------------------
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'a123456789z';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
If (!$conn)
{
die ('Could not connect: ' . mysql_error());
}
//----------------------------
If (isset($tutorial_count))
{
$sql = 'SELECT tutorial_author, tutorial_count
FROM tcount_tbl WHERE tutorial_count= $tutorial_count';
}
else
{
$sql = 'SELECT tutorial_author, tutorial_count
FROM tcount_tbl WHERE tutorial_countIS $tutorial_count';
}
//-----------------------------------------
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
If (!$retval)
{
die('Could not get data: ' . mysql_error());
}
While ($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo "Author:{$row['tutorial_author']} <br> ".
"Count: {$row['tutorial_count']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
Hàm isset() để kiểm tra một biến là có giá trị hay chưa, nếu có thì trả về giá trị True, ngược lại trả về giá trị False.
(Nguyễn Km Tuấn)
» Tin mới nhất:
» Các tin khác: