-
08-11-2009, 06:46 AM #1Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Bài 21 Sử dụng PHP để truy xuất dữ liệu thông qua câu lệnh SQL. Phân trang ứng dụng.
Câu lệnh SELECT
Câu lệnh SELECT được dùng để truy xuất dữ liệu từ một bảng. Kết quả trả về dưới dạng bảng được lưu trong 1 bảng, gọi là bảng kết quả - result table (còn được gọi là tập kết quả - result set).
Cú pháp
Cú pháp của câu lệnh SELECT như sau:
SELECT tên_các_cột
FROM tên_bảng
Ví dụ, để truy xuất các cột mang tên LastName và FirstName từ một bảng có tên là Persons, ta dùng một câu lệnh SELECT như sau:
SELECT LastName, FirstName FROM Persons
Ta có thể dùng dấu * để thay thế cho tất cả các cột:
SELECT * FROM Persons
Kết quả trả về từ một câu truy vấn SQL được lưu trong 1 tập kết quả (result set). Tập kết quả này sau đó sẽ được lập trình viên tìm cách đưa ra dưới dạng một bảng hoặc một hình thức nào đó. Xin xem chi tiết ở phần lập trình với php
Mệnh đề WHERE được dùng để thiết lập điều kiện truy xuất.
Để truy xuất dữ liệu trong bảng theo các điều kiện nào đó, một mệnh đề WHERE có thể được thêm vào câu lệnh SELECT.
Cú pháp mệnh đề WHERE trong câu lệnh SELECT như sau:
SELECT tên_cột FROM tên_bảng
WHERE tên_cột phép_toán giá_trị
Trong mệnh đề WHERE, các phép toán được sử dụng là
Phép toán Mô tả
= So sánh bằng
<> So sánh không bằng
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
BETWEEN Nằm giữa một khoảng
LIKE So sánh mẫu chuỗi
Lưu ý: Trong một số phiên bản của SQL, phép toán <> có thể được viết dưới dạng !=
Ví dụ để lấy danh sách những người sống ở thành phố Sandnes, ta sử dụng mệnh đề WHERE trong câu lệnh SELECT như sau:
SELECT * FROM Persons
WHERE City = 'Sandnes'
Hai toán tử AND và OR nối hai hoặc nhiều điều kiện trong mệnh đề WHERE lại với nhau.
Toán tử AND sẽ hiển thị 1 dòng nếu TẤT CẢ các điều kiện đều thoả mãn. Toán tử OR hiển thị một dòng nếu BẤT KỲ điều kiện nào được thoả.
Ví dụ: Sử dụng AND để tìm những người có tên là Tove và họ là Svendson:
SELECT * FROM Persons
WHERE FirstName = 'Tove'
AND LastName = 'Svendson'
Ví dụ: Sử dụng OR để tìm những người có tên là Tove hoặc họ là Svendson:
SELECT * FROM Persons
WHERE firstname = 'Tove'
OR lastname = 'Svendson'
Ví dụ: Sử dụng kết hợp AND và OR cùng với dấu ngoặc đơn để tạo nên các câu truy vấn phức tạp:
SELECT * FROM Persons WHERE
(FirstName = 'Tove' OR FirstName = 'Stephen')
AND LastName = 'Svendson'
Từ khoá DISTINCT được dùng để lọc ra các giá trị khác nhau.
Câu lệnh SELECT sẽ trả về thông tin về các cột trong bảng. Nhưng nếu chúng ta không muốn lấy về các giá trị trùng nhau thì sau?
Với SQL, ta chỉ cần thêm từ khoá DISTINCT vào câu lệnh SELECT theo cú pháp sau:
SELECT DISTINCT tên_cột FROM tên_bảng
Ví dụ: Tìm tất cả các công ty trong bảng đặt hàng, câu lệnh SQL thông thường sẽ như sau:
SELECT Company FROM Orders
Để tìm tất cả các công ty khác nhau trong bảng đặt hàng, ta sử dụng câu lệnh SQL sau:
SELECT DISTINCT Company FROM Orders
Mệnh đề ORDER BY được dùng để sắp xếp các dòng.
Cú pháp: Select..... ORDER BY tên các cột [ASC/DESC]
ORER BY có thể đi kèm từ khóa DESC để sắp xếp theo chiều giảm dần, hoặc ASC để sắp xếp theo chiều tăng dần của các cột
VD: Để lấy danh sách các công ty theo thứ tự chữ cái (tăng dần):
SELECT Company, OrderNumber FROM Orders
ORDER BY Company
VD 2: Lấy danh sách các công ty theo thứ tự chữ cái (tăng dần) và hoá đơn đặt hàng theo thứ tự số tăng dần:
SELECT Company, OrderNumber FROM Orders
ORDER BY Company, OrderNumber
VD 3: Lấy danh sách các công ty theo thứ tự giảm dần:
SELECT Company, OrderNumber FROM Orders
ORDER BY Company DESC
Khi truy vấn dữ liệu mà nhận được một danh sách kết quả quá dài, người ta thường phải phân trang ứng dụng cho phù hợp (ít nhất là về mặt thẩm mỹ).
Nguyên tắc của việc phân trang ứng dụng như sau:
- Bước 1: Tính tóan số lượng bản ghi thỏa mãn điều kiện trả về ( thường sử dụng hàm count trong câu lệnh SQL).
- Bước 2: Xác định số lượng bản ghi sẽ hiển thị trên một trang.
- Bước 3: Dựa trên các thông tin có được từ bước 1 và 2, xác định được số trang cần hiển thị.
- Bước 4: Tính tóan số lượng bản ghi sẽ hiển thị tính từ trang nào đó do NSD lựa chọn (Sử dụng câu lệnh LIMIT).
Dưới đây tôi sẽ cung cấp cho các bạn 2 function,
- Function GetPageLinks ($Sql, $PageSize): Trả về một chuỗi văn bản chứa số trang hiển thị, với dữ liệu vào bao gồm câu lệnh SQL ($Sql) xác định số lượng bản ghi thỏa mãn điều kiện tìm kiếm, và "kích thước" của một trang ($PageSize)
function GetPageLinks($Sql,$PageSize)
{
$result=mysql_query ($Sql);
if (!$result or mysql_num_rows ($result)==0)
{
}
else
{
$line=mysql_fetch_array($result);
$Pages=ceil($line[0]/$PageSize);
if ($Pages>1)
{
$PageLink="Trang ";
for ($i=0;$i<=$Pages-1;$i++)
{
$j=$i+1;
if ($j==$_GET["page"])
{
$PageLink.=" {$j} | ";
}
else
{
$NewGet="";
reset ($_GET);
while (list($key, $val) = each($_GET))
{
if ($key!='page')
{
$NewGet.="&{$key}={$val}";
}
}
$NewGet.="&page={$j}";
$NewGet=substr($NewGet,1);
$PageLink.=" <a href='?{$NewGet}'>{$j}</a> | ";
}
}
$PageLink=substr($PageLink,0,-2);
}
}
return $PageLink;
}
(VD dưới đây sử dụng một câu truy vấn lấy dữ liệu từ một bảng dulieu với một Category có id xác định:
function LoadList()
{
if (isset($_GET["CatId"]) and is_numeric ($_GET["CatId"]))
$Dieukien="where CatId={$_GET["CatId"]}";
// Cau lenh truy van chinh khi chua phan trang:
$Sql="Select * from dulieu {$Dieukien} ";
// Tinh toan so luong ban ghi tra ve:
$PageSize=20;
$CountSQL="Select count(*) from dulieu {$Dieukien}";
$PageLinks= GetPageLinks ($CountSQL,$PageSize);
if (isset ($_GET["page"]) and is_numeric ($_GET["page"]))
{
$StartNum=$PageSize * ($_GET["page"]-1); // Xac dinh vi tri ban ghi bat dau
}
else
{
$StartNum=0;
}
//Tiep tuc xay dung cau lenh truy van de lay du lieu theo trang
$Sql.= " Limit {$StartNum}, {$PageSize}";
$result=mysql_query ($Sql);
if (!$result or mysql_num_rows ($result)==0)
{
$tmp="Híc, tui chẳng mò được chi cả!";
}
else
{
$tmp="{$PageLinks}";
//========== Hiển thị dữ liệu, các bạn tự viết cho phù hợp với yêu cầu
$tmp.="{$PageLinks}";
}
return $tmp;
}
Các Chủ đề tương tự
-
Làm thế nào để tăng lưu lượng truy cập có mục tiêu vào trang web?
Bởi vytieubao trong diễn đàn Thủ thuật SeoTrả lời: 0Bài viết cuối: 01-14-2015, 08:02 AM -
Bất ngờ xuất hiện trang chủ Đế Vương Online
Bởi huong2211hd trong diễn đàn Game OnlineTrả lời: 0Bài viết cuối: 02-03-2010, 04:21 PM -
Game Loan thế đã xuất hiện Trang chủ và Forum
Bởi tuan0908622086 trong diễn đàn Game OnlineTrả lời: 0Bài viết cuối: 12-29-2009, 07:49 PM
Căn hộ cao cấp Vista Verde xây dựng bởi Capitaland và Thiên Đức. cảm giác tươi mới đẹp sang trọng gần trục giao thông. Vista Verde cảm giác tươi mới sống hiện đại dịch vụ như mơ. Chung cư không gian...
Khu đô thị Vista Verde chuẩn mực...