LEFT JOIN, RIGHT JOIN

Một phần của tài liệu tự học php (Trang 156)

III. Bảng ảo

b. LEFT JOIN, RIGHT JOIN

Khi kết nối các bảng dùng LEFT|RIGHT JOIN, ta chỉ định việc so sánh giá trị trong các cột của các bảng được ưu tiên cho mối quan hệ bên nhánh trái | phải. Việc đổi thứ tự ưu tiên này sẽ làm ảnh hưởng tới kết quả truy vấn.

Cú pháp: SELECT list_column FROM name_table LEFT|RIGHT name_table_link ON conditional_link [WHERE conditional]

[ORDER BY list_column_sort [DESC]]

c. Mệnh đề liên kết dữ liệu nhiều bảng

Cũng với SELECT … FROM với JOIN, chúng ta có thể kết hợp nhiều bảng dữ liệu trong một câu lệnh truy vấn. Một bảng có thể liên kết với một hay nhiều bảng khác nhau trong cùng một câu truy vấn.

Cú pháp:

SELECT list_column FROM name_table_1

INNER LEFT|RIGHT name_table_2 ON conditional_link_2

INNER LEFT|RIGHT name_table_3 ON conditional_link_2

[WHERE conditional]

[ORDER BY list_column_sort [DESC]]

8. Sử dụng hàm trong SQL a. Các hàm cấu trúc điều khiểna. Các hàm cấu trúc điều khiển a. Các hàm cấu trúc điều khiển - Hàm IF

Cú pháp:

IF(biểu_thức_so_sánh, biểu_thức_1, biểu_thức_2)

Kiểm tra biểu thức so sánh đúng thì kết quả trả về là một biểu thức 1, ngược lại kết quả trả về là biểu thức 2

Ví dụ:

- Hàm IFNULL

- Hàm NULLIF

Cú pháp:

- Hàm CASE

Cú pháp:

b. Các hàm chuyển đổi kiểu dữ liệu

- Hàm CAST - Hàm CONVERT

c. Hàm xử lý chuỗi

- Hàm CHAR_LENGHT, hàm CHARACTER_LENGHT VÀ LENGTH - Hàm CONCAT và hàm CONCAT_WS

- Hàm LOWER và hàm UPPER

- Hàm LEFT, hàm RIGHT, hàm MID và hàm SUBSTRING - Hàm REPEAT - Hàm REVERSE - Hàm REPLACE - Hàm ENCODE và hàm DECODE - Hàm SPACE - Hàm STRCMP d. Các hàm sử lý số - Hàm ABS() - Hàm CEILING()/ hàm CEIL() - Hàm FLOOR() - Hàm MOD() - Hàm PI() - Hàm POW() và hàm POWER() - Hàm ROUND() - Hàm SQRT

- Hàm SIGN() - Hàm RAND()

e. Các hàm xử lý thời gian

- Hàm ADDDATE/ DATE_ADD/ SUBDATE()/ DATE_SUB()

- Hàm CURDATE / CURRENT_DATE / CURTIME/ CURRENT_TIME/ NOW() - Hàm DATE()/ MONTH() MONTHNAME() / YEAR()

- Hàm DAY()/DAYOFMONTH/ DAYNAME/ DAYOFWEEK/ DAYOFYEAR - Hàm SECOND/ MINUTE/ HOUR/ TIME

- Hàm DATEDIFF/ TIMEDIFF

9. Import và export dữ liệua. Import dữ liệua. Import dữ liệu a. Import dữ liệu

Nhập dữ liệu từ bên ngoài vào database trong MySQL

b. Export dữ liệu

Xuất dữ liệu từ database trong MySQL ra tập tin thuộc một trong các dạng sau: - SQL - LaTex - Microsoft Excel 2000 - Microsoft Word 2000 - CSV for MS Excel - CSV - XML Chương 9: PHP&MYSQL I. Kết nối CSDL 1. Tạo kết nối

Trước khi chúng ta truy cập và làm việc với dữ liệu trong CSDL, chúng ta cần phải tạo kết nối đến CSDL.

Để thực hiện được công việc này, chúng ta sử dụng hàm mysql_connect()

Cú pháp:

Trong đó:

+ servername: tham số tùy chọn, xác định server cần phải kết nối tới. Giá trị mặc định là localhost.

+ username: tham số tùy chọn, xác định tên người dùng đăng nhập vào hệ thống + password: tham số tùy chọn, xác định mật khẩu người dùng. Giá trị mặc định là “”.

Chú ý: Hàm này có nhiều hơn 3 tham số, tuy nhiên những tham số trên cần thiết và rất quan trọng.

Ví dụ: Tạo kết nối <?php

// tạo kết nối và lưu vào biến $conn

$conn = mysql_connect("localhost","root",""); // kiểm tra kết nối

if(!$conn) {

die ("Can not connect database ".mysql_error());

exit; }

?>

2. Chọn CSDL

Sau khi đã tạo được kết nối, chúng ta cần phải chọn một CSDL để làm việc. Để thực hiện công việc này, chúng ta sử dụng hàm mysql_select_db().

Kết quả trả về của hàm này là TRUE nếu chọn CSDL thành công, ngược lại giá trị trả về là FALSE.

Cú pháp:

mysql_select_db(database, connection) Trong đó:

+ database: tham số bắt buộc, xác định tên CSDL cần làm việc

+ connection: tham số tuy chọn, xác định kết nối. Nếu không xác định thì kết nối cuối cùng được mở bởi hàm mysql_connect() hoặc hàm mysql_pconnect() sẽ được sử dụng.

Ví dụ: Kết nối đến CSDL khoacntt <?php

$conn = mysql_connect("localhost","root",""); if(!$conn)

echo "Can not connect database";

exit; }

// chọn CSDL khoacntt

$select_db = mysql_select_db("khoacntt",$conn); // kiểm tra CSDL

if (!$select_db) {

die("Can not connect database".mysql_error()); }

?>

3. Truy vấn dữ liệu

Để thực hiện việc truy vấn dữ liệu, chúng ta dùng hàm mysql_query().

Hàm mysql_query() sẽ trả về kết quả của cấu lệnh truy vấn nếu thực hiện thành công, ngược lại sẽ trả về FALSE.

Cú pháp:

mysql_query(query, connection) ; Trong đó:

+ query: tham số bắt buộc, là câu lệnh truy vấn được gửi đi.

+ connection: tham số tùy chọn, xác định kết nối. Nếu không xác định thì kết nối cuối cùng được mở bởi hàm mysql_connect() hoặc mysql_pconnect() sẽ được sử dụng.

Ví dụ: Thực hiện truy vấn dữ liệu trong bảng sinhvien trong CSDL khoacntt. <?php

$conn = mysql_connect("localhost","root",""); if (!$conn)

{

echo "Can not connection database"; exit;

}

mysql_select_db('khoacntt',$conn); $sql ="SELECT * FROM sinhvien"; $result= mysql_query($sql);

while($r = mysql_fetch_array($result)) {

echo "MaSV: ".$r['ma_sv']." Ten sv: ".$r['ten_sv']."</br>"; }

?>

4. Thông báo lỗi

Trong quá trình làm việc với CSDL lỗi có thể phát sinh. Do đó, chúng ta cần thông báo các lỗi phát sinh này.

Để thực hiện công việc này, chúng ta sử dụng hàm mysql_error().

Hàm này có kết quả trả về là câu thông báo lỗi nếu có lỗi phát sinh, ngược lại kết quả trả về sẽ là một chuỗi rỗng “”.

Cú pháp:

mysql_error(connection) Trong đó:

connection: tham số tùy chọn, xác định kết quả kết nối. Nếu không kết nối thì kết quả cuối cùng được mở bởi hàm mysql_connect() hoặc mysql_pconnect() sẽ được sử dụng.

Ghi chú: Chúng ta thường kết hợp hàm mysql_error() với hàm die() hoặc hàm exit() để vừa thông báo lỗi vừa kết thúc công việc.

Ví dụ: Thông báo lỗi nếu không tạo kết nối <?php

$conn = mysql_connect("localhost","root",""); if (!$conn)

{

echo "Can not connection database"; exit;

}

?>

5. Đóng kết nối

Sau khi đã làm việc xong với CSDL, chúng ta cần đóng kết nối đã mở. Để thực hiện công việc này, chúng ta sử dụng hàm mysql_close().

Hàm này có kết quả trả về là TRUE nếu đóng kết nối thành công, ngược lại sẽ trả về giá trị là FALSE nếu thất bại.

Cú pháp:

mysql_close(connection);

+ connection: tham số tùy chọn, xác định kết nối. Nếu không xác định thì kết nối cuối cùng được mở bởi hàm mysql_connect()mysql_pconnect() sẽ được sử dụng.

Ví dụ: Đóng kết nối <?php

$conn = mysql_connect("localhost","root",""); ……..

mysql_close($conn);

?>

II. Làm việc với CSDL MySQL 1. Đếm số lượng mẫu tin1. Đếm số lượng mẫu tin 1. Đếm số lượng mẫu tin

Thông thường, chúng ta cần biết số lượng mẫu tin được truy vấn dữ liệu trước khi xử lý các công việc tiếp theo.

Để thực hiện công việc này, chúng ta sử dụng hàm mysql_num_rows().

Hàm này có kết quả trả về là số lượng mẫu tin nếu thành công, ngược lại kết quả trả về là FALSE nếu thất bại.

Cú pháp:

mysql_num_rows(data); Trong đó:

+ data: là tham số bắt buộc. Xác định con trỏ dữ liệu. Con trỏ dữ liệu là kết quả trả về của hàm mysql_query()

Ví dụ: Đếm số mẫu tin trong bảng sinhvien <?php

$conn = mysql_connect("localhost","root",""); if (!$conn)

{

echo "Can not connection database"; exit;

}

mysql_select_db('khoacntt',$conn); $sql ="SELECT * FROM sinhvien"; $result= mysql_query($sql);

echo "Số mẫu tin: ". mysql_num_rows($result);

mysql_close($conn);

2. Hiển thị dữ liệua. Duyệt dữ liệua. Duyệt dữ liệu a. Duyệt dữ liệu

Có nhiều cách để duyệt dữ liệu: duyệt dữ liệu theo dạng mỗi mẫu tin là một dòng, duyệt theo dạng mỗi mẫu tin là một mảng, duyệt theo dạng mỗi mẫu tin là một đối tượng.

Cách 1: Duyệt dữ liệu theo dạng mỗi mẫu tin là một dòng bằng hàm mysql_fetch_row().

Hàm này trả về một mảng (có chỉ số) chứa giá trị của một dòng dữ liệu với mỗi phần tử là nội dung của một cột.

Sau đó truy xuất bằng cách gọi từng phần tử của mảng $row[0], $row[1] ,$row[2],… Cú pháp:

mysql_fetch_row(data)

+ data: là tham số bắt buộc. Xác định số con trỏ dữ liệu. Con trỏ dữ liệu là kết quả trả về của hàm mysql_query().

Ví dụ: Duyệt dữ liệu trong bảng sinhvien sử dụng hàm mysql_fetch_row() <?php

$conn = mysql_connect("localhost","root",""); if (!$conn)

{

die('Could not connect: ' . mysql_error()); }

mysql_select_db("khoacntt", $conn);

$result = mysql_query("SELECT * FROM sinhvien"); for($i=1;$i<=mysql_num_rows($result);$i++)

{

print_r(mysql_fetch_row($result));

echo "</br>"; }

mysql_close($conn);

?>

Cách 2: Duyệt theo dạng mỗi mẫu tin là một mảng bằng hàm mysql_fetch_array()

Hàm này trả về một mảng (có chỉ số chuỗi) chứa giá trị của một dòng dữ liệu với mỗi phần tử là nội dung của một cột.

Sau đó truy xuất bằng cách gọi từng phần tử của mảng $row[“tên cột 1”], $row[“tên cột 2”], $row[“tên cột 3”],…

mysql_fetch_array(data)

+ data: là tham số bắt buộc. Xác định số con trỏ dữ liệu. Con trỏ dữ liệu là kết quả trả về của hàm mysql_query().

Ví dụ: Duyệt dữ liệu trong bảng sinhvien sử dụng hàm mysql_fetch_array() <?php

$conn = mysql_connect("localhost","root",""); if (!$conn)

{

die('Could not connect: ' . mysql_error()); }

mysql_select_db("khoacntt", $conn);

$result = mysql_query("SELECT * FROM sinhvien"); while($row = mysql_fetch_array($result))

{

echo $row['ma_sv'] . " " . $row['ten_sv']; echo "<br />";

}

mysql_close($conn);

?>

Cách 3: Duyệt theo dạng mỗi mẫu tin là một đối tượng bằng hàm mysql_fetch_object()

Hàm này có kết quả trả về là một mẫu tin trong bộ các mẫu tin như một đối tượng.

Sau đó truy xuất bằng cách gọi từng thuộc tính của đối tượng $tên_đôi_tượng ->tên cột 1, $tên_đôi_tượng ->tên cột 2, $tên_đôi_tượng ->tên cột 3,…

Cú pháp:

mysql_fetch_object(data)

+ data: là tham số bắt buộc. Xác định số con trỏ dữ liệu. Con trỏ dữ liệu là kết quả trả về của hàm mysql_query().

Ví dụ: Duyệt dữ liệu trong bảng sinhvien sử dụng hàm mysql_fetch_object() <?php

$conn = mysql_connect("localhost","root",""); if (!$conn)

{

die('Could not connect: ' . mysql_error()); }

mysql_select_db("khoacntt", $conn);

for($i=1;$i<=mysql_num_rows($result);$i++) {

$ob =mysql_fetch_object($result);

echo $ob->ma_sv.", ".$ob->ten_sv."</br>"; }

mysql_close($conn);

?>

b. Hiển thị dữ liệu không định dạng

Khi chúng ta chỉ có nhu cầu hiện thị dữ liệu mà không cần định dạng thì cách đơn giản nhất là in dữ liệu theo dạng bảng.

Ví dụ: Hiển thị thông tin sinh viên trong bảng sinhvien

<p > <h1 align="center">THÔNG TIN SINH VIÊN</h1>

<table width="1000" border="1" cellspacing="2" cellpadding="2" align="center"> <tr> <td width='100px'>Mã SV</td> <td width='250px'>Tên SV</td> <td width='80px'>Ngay sinh</td> <td width='70px'>Gioi tinh</td> <td width='300px'>Quen quan</td> <td width='100px'>Nam hoc</td> <td width='100px'>Lop hoc</td> </tr> <?php

$conn = mysql_connect("localhost","root",""); if (!$conn)

{

die('Could not connect: ' . mysql_error()); }

mysql_select_db("khoacntt", $conn);

$result = mysql_query("SELECT * FROM sinhvien"); while($row = mysql_fetch_array($result))

{ echo "<tr>"; echo "<td width='100px'>".$row[0]."</td>"; echo "<td width='260px'>".$row[1]."</td>"; echo "<td width='80px'>".$row[2]."</td>"; echo "<td width='70px'>".$row[3]."</td>"; echo "<td width='300px'>".$row[4]."</td>"; echo "<td width='100px'>".$row[5]."</td>"; echo "<td width='100px'>".$row[6]."</td>"; echo "</tr>"; } mysql_close($conn); ?>

</table> </p>

c. Hiển thị dữ liệu có yêu cầu

Khi xây dựng một ứng dụng web nếu chúng ta hiển thị thông tin không có định dạng thì sẽ làm cho người xem cảm thấy nhàm chán và khó khăn trong quá trình đọc và tìm kiếm dữ liệu, chính vì vậy mà phát sinh các yêu cầu hiển thị dữ liệu khác nhau.

- Định dạng hiển thị dữ liệu

Yêu câu đơn giản nhất của một trang web là dữ liệu hiển thị phải được định dạng giúp cho người dùng dễ dàng đọc thông tin.

Các định dạng thông thường là định dạng các cột, dòng và kích thước, màu sắc, kiểu chữ, … cho nội dung hiển thị.

Chú ý: Để thực hiện được các yêu cầu về định dạng, chúng ta cần phải xem xét và tính toán các nội dung cần hiển thị.

Ví dụ:

- Tạo các cột tùy biến

Đôi khi, nội dung của một số cột trong CSDL khi hiển thị sẽ gây cho người dùng khó hiểu, hoặc chúng ta phải có dòng giải thích cho những thông tin đó. Chính vì vậy mà nhu cầu hiển thị dữ liệu một cách rõ ràng, chi tiết, dễ hiểu trở thành một yêu cầu tất yếu khi thiết kế trang web.

Ví dụ:

- Phân trang

Đối với những bảng có số lượng mẫu tin lớn khi hiển thị dữ liệu sẽ làm cho người dùng cảm thấy khó xem. Phân trang dữ liệu giúp cho việc xem và tìm kiếm thông tin dễ dàng, nhanh chóng và thuận tiện.

Ví dụ:

- Liên kết trang có chuỗi tham số.

* Chuỗi URL có cấu trúc định dạng như sau: http://<host>[:<port>][path][?string_parameter] Trong đó:

string_parameter có Cú pháp như sau:

Chú ý: Trong trường hợp có nhiều tham số, cặp [parameter_1 = value_1] phân cánh nhau bằng dấu &

Ví dụ:

Để nhận giá trị truyền qua tham số này ta dùng biến $_REQUEST[“parameter”]

Ví dụ:

d. Chuyển đổi giá trị thời gian

Định dạng date time trong MySQL có dạng năm-tháng-ngày.

Ví dụ: Khi nhập ngày – tháng – năm ở PHP như sau: 25th January 2009 thì khi lưu trữ vào CSDL MySQL chúng sẽ được định nghĩa như sau: 2009-01-25

Khi nhập ngày tháng năm từ PHP vào MySQL ta có thể dùng hàm date() đã học hoặc sử dụng hàm DATE_FROMAT() trong MySQL

Để định dạng ngày tháng năm YYYY-MM-DD của MySQL sang định dạng MM-DD- YYYY có thể dùng hàm DATE_FORMAT() với Cú pháp như sau:

SELECT DATE_FORMAT (column_date ‘%M-%D-%Y’) Hay

SELECT DATE_FORMAT (column_date, %M %D %Y)

Trong đó: %M và %D là định dạng tháng và ngày với 2 ký số, %Y là định dạng năm với 4 ký số.

Chú ý: Chúng ta cũng có thể căn cứ vào bảng định dạng thời gian sau để định dạng theo yêu câu:

Ký tự Mô tả

%M Tên tháng trong năm(January, February…) %W Tên thứ trong tuần (Sunday, Monday,…) %D Ngày trong tháng theo dạng 1st, 2nd, 3th…

%Y Năm với 4 ký số(2010)

%y Năm với 2 ký số(10)

%m Tháng với hai ký số (01-12)

%d Ngày trong tháng với hai ký số (01-31) %H Giờ trong ngày với hai ký số(00-23) %h Giờ trong ngày với hai ký số(00-12) %i Phút trong giờ với hai ký số(01-59)

%r 12 giờ với định dạng (hh:mm:ss [AM|PM]) %T 12 giờ với định dạng (hh:mm:ss)

%p AM hay PM

3. Lưu trữ dữ liệu mới vào CSDL

Để lưu thông tin từ trong PHP vào trong MySQL, chúng ta sẽ sử dụng hàm mysql_query()

kết hợp với câu lệnh truy vấn INSERT INTO. Hàm này được dùng để gửi một truy vấn(hiển thị thông tin, thêm mới, xóa, cập nhật) tới một kết nối MySQL

Cú pháp:

INSERT INTO table_name

VALUES (value1, value2, value3,...) Hoặc

INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)

Chú ý: Cú pháp INSERT INTO dùng để thêm một mẫu tin mới vào bảng trong CSDL

Ví dụ: Tạo form nhập thông tin của một mẫu tin(form_insert.php)

Các tên tương ứng  masv  tensv  d, m, y  gt  quequan  namhoc  lophoc

Ví dụ: Trang lấy thông tin từ form (insert_sinhvien.php) <?php $masv = $_POST['masv']; $tensv = $_POST['tensv']; $d = $_POST['d']; $m = $_POST['m']; $y = $_POST['y']; $gt = $_POST['gt']; $quequan = $_POST['quequan']; $namhoc = $_POST['namhoc']; $lophoc = $_POST['lophoc']; // xu ly dl ngay thang nam if (checkdate($m,$d,$y)) {

$ngaysinh =$d."/".$m."/".$y; }

// kiem tra xem trong csdl co masv nay chua function kt($masv)

{

$conn = mysql_connect("localhost","root",""); mysql_select_db("khoacntt",$conn);

$sql="SELECT ma_sv FROM sinhvien WHERE ma_sv='$masv'"; $result=mysql_query($sql);

$kt1=true;

while ($row = mysql_fetch_array($result)) { $kt1=false; } return $kt1; mysql_close($conn); } if (kt($masv)&& checkdate($m,$d,$y)) { $conn = mysql_connect("localhost","root",""); mysql_select_db("khoacntt",$conn);

$sql = "INSERT INTO sinhvien

VALUES('$masv','$tensv','$ngaysinh','$gt','$quequan','$namhoc','$lophoc')"; mysql_query($sql);

}

?>

4. Cập nhật dữ liệu

Để cập nhật thông tin từ PHP vào MySQL, chúng ta sẽ sử dụng hàm mysql_query() kết hợp với câu lệnh truy vấn UPDATE. Hàm này được dùng để gửi một truy vấn (hiển thị thông tin, thêm mới, xóa, cập nhật) tới một kết nối MySQL

Cú pháp:

UPDATE table_name

SET column1=value, column2=value2,... WHERE some_column=some_value

- Mã sinh viên được đọc từ CSDL với tên listbox là masv.

- Tên sinh viên mới có tên textfield là tensv

Ví dụ: Trang lấy thông tin từ form cập nhật dữ liệu <?php $conn = mysql_connect("localhost","root",""); mysql_select_db("khoacntt", $conn); if(strlen($_POST['tensv'])) { $tensv = trim($_POST['tensv']); $masv = trim($_POST['masv']);

mysql_query("UPDATE sinhvien SET ten_sv = '$tensv' WHERE ma_sv = '$masv'"); }

mysql_close($conn);

?>

5. Xóa dữ liệu

Để xóa thông tin trong CSDL thông qua PHP, chúng ta sẽ sử dụng hàm mysql_query() kết hợp với câu lệnh truy vấn DELETE. Hàm này được dùng để gửi một truy vấn (hiển thị thông tin, thêm mới, xóa, cập nhật) tới một kết nối MySQL

Cú pháp:

DELETE FROM table_name

WHERE some_column = some_value

Ví dụ: Form xóa dữ liệu trong bảng sinhvien

- Chọn mã sinh viên cần xóa có tên listbox là masv, value được lấy trong CSDL

Ví dụ: Lấy thông tin từ form và xóa dữ liệu trong bảng sinh viên <?php

$conn = mysql_connect("localhost","root",""); mysql_select_db("khoacntt", $conn);

if(strlen($_POST['masv'])) {

$masv = trim($_POST['masv']);

mysql_query("DELETE FROM sinhvien WHERE ma_sv = '$masv'"); }

mysql_close($conn);

?>

III. PHP kết hợp với các CSDL SQL Server

Một phần của tài liệu tự học php (Trang 156)