Thứ Hai, 25 tháng 2, 2013

Code lấy thời gian hiện tại date_default_timezone_set()


Code lấy thời gian hiện tại date_default_timezone_set();

<?php
date_default_timezone_set('Asia/Ho_Chi_Minh');
echo gmdate("d/m/Y H:i:s", time());
?>

kết quả : 24/07/2012 07:35:47       

Cách lấy mã số tự động để chèn vào csdl



Cách lấy mã số tự động để chèn vào csdl, với ngày + tháng + năm + mã số,truy vấn Mysql .

ta có bảng masotudong: có 1 cột: idms nvarchar(50)

<?php
 include 'ketnoidata.php';
 date_default_timezone_set('Asia/Ho_Chi_Minh');
 $mahs=0;
$sql = "select max(convert(right(idms,4), decimal)) as max from matudong where left(idms,8) = '".date("dmY")."';";
$result = mysql_query($sql)
    or die("Lỗi chọn: ".mysql_error());
while($row = mysql_fetch_array($result))
    $mahs = $row["max"] + 1;
if($mahs < 10)
    $mahs = date("dmY")."000".$mahs;
else if($mahs < 100)
    $mahs = date("dmY")."00".$mahs;
else if($mahs < 1000)
    $mahs = date("dmY")."0".$mahs;
else
    $mahs = date("dmY").$mahs;
?>

<input type="text" name="txtid" value="<?php echo $mahs; ?>"/>       

Các câu truy vấn cơ bản trong MySQL



1- Kết nối cơ sở dữ liệu:

Cú pháp:

mysql_connect("hostname","user","pass")

2- Lựa chọn cơ sở dữ liệu:

Cú pháp:

mysql_select_db("tên_CSDL")

Ví dụ:

$conn=mysql_connect("localhost","root","root") or die(" khong the ket noi");
mysql_select_db("demo");

Ví dụ 2 :

<?php
$ketnoi=mysql_connect('localhost','root','') or die ('Ket noi ko thanh cong');
$ketnoidb=mysql_select_db('matudong') or die ('ket noi that bai db');
mysql_query("set names 'utf8'",$ketnoi); // câu này cho phép nhập kiws tự unicode utf8 chèn vào csdl

?>


3- Thực thi câu lệnh truy vấn:

Cú pháp:

mysql_query("Câu truy vấn ở đây");

4- Đếm số dòng dữ liệu trong bảng:

Cú pháp:

mysql_num_rows();

5- Lấy dữ liệu từ bảng đưa vào mảng:

Cú pháp:

mysql_fetch_array();

6- Đóng kết nối cơ sở dữ liệu:

Cú pháp:

mysql_close();

Ví dụ áp dụng:

Tạo cơ sở dữ liệu dựa trên từng đoạn code sau:

mysql -hlocalhost -uroot -proot
mysql>create database demo_mysql;
mysql> use demo_mysql;
mysql>create table user(id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password CHAR(50) NOT NULL, PRIMARY KEY(id));

Tạo trang test.php. Đầu tiên chúng ta sẽ kết nối cơ sở dữ liệu.

<?
$conn=mysql_connect("localhost", "root", "root") or die("can't connect database");
mysql_select_db("demo_mysql",$conn);
?>

Tiếp đến viết câu truy vấn lấy ra tất cả user từ database.

<?
$sql="select * from user";
$query=mysql_query($sql);
?>

Kiểm tra xem trong bảng dữ liệu đã tồn tại user nào chưa ?. Nếu chưa thì xuất ra thông báo lỗi, ngược lại thì đưa chúng vào mảng và lặp cho đến hết bảng dữ liệu.

<?
if(mysql_num_rows($query) == 0)
{
echo "Chua co du lieu";
}
else
{
while($row=mysql_fetch_array($query))
{
echo $row[username] ." - ".$row[password]."<br />";
}
}
?>

Và cuối cùng chúng ta đóng kết nối và kết thúc thao tác xử lý.

<?
mysql_close($conn);
?>

Và cuối cùng là file hoàn chỉnh của ứng dụng trên:

<?
$conn=mysql_connect("localhost", "root", "root") or die("can't connect database");
mysql_select_db("demo_mysql",$conn);
$sql="select * from user";
$query=mysql_query($sql);
if(mysql_num_rows($query) == 0)
{
echo "Chua co du lieu";
}
else
{
while($row=mysql_fetch_array($query))
{
echo $row[username] ." - ".$row[password]."<br />";
}
}
mysql_close($conn);
?>

Chủ Nhật, 24 tháng 2, 2013

Tìm kiếm bằng tiếng việt với MSQL


Tìm kiếm bằng tiếng việt với MSQL

Category: PHP, Tag:
07/25/2012 03:43 pm
Bạn nào đã từng lập trình chắc cũng biết là để tìm kiếm tiếng Việt cũng chẳng đơn giản tí nào và là vấn đề đau đầu. Tìm kiếm tiếng Việt trong CSDL MySQL khá đau đầu với nhiểu lập trình viên.

Giải pháp tìm kiếm thông thường – tìm kiếm khớp

Khi lập trình, để thực hiện một câu lệnh tìm kiếm chúng ta thường áp dụng 2 phương pháp sau:
- Giải pháp 1:
SELECT * FROM table_name WHERE column_name = '%keyword%'
- Giải pháp 2:
SELECT * FROM table_name WHERE column_name LIKE '%keyword%'
Hai giải pháp này được áp dụng khá nhiều khi chúng ta cần tìm những kết quả tìm kiếm với nội dung chính xác với từ khóa cần tìm. Tuy nhiên, tiếng Việt không đơn giản như vậy.

Tìm kiếm Fulltex

Giải pháp này thường được áp dụng với CSDL lớn, số lượng record nhiều. Theo mình biết thì với giải pháp này số lượng record càng nhiều thì dữ liệu càng chính xác. Điều bất tiện là tìm kiếm Fulltext chỉ áp dụng cho các field đã được fulltext. Giải pháp này có cái nay là không những tìm kiếm với từ khóa chính xác, nó còn tìm được các từ khóa gần giống và các record có liên quan đến dữ liệu trong keyword chúng ta đưa vào.
SELECT * from table_name WHERE match('column_1', 'column_2', 'column_3', '.....') against('keyword');
Khi câu lệnh MATCH được sử dụng trong mệnh đề SELECT nó sẽ trả lại một thứ tự sắp xếp theo mức độ thích hợp, được xác định bằng một con số thập phân dương. Số này càng gần với 0 thì bản ghi càng kém thích hợp. Giá trị thích hợp này được xác định dựa trên biểu thức tìm kiếm, số từ có trong các trường được đánh chỉ mục cũng như tổng số bản ghi được tìm kiếm.
Câu lệnh AGAINST chỉ chấp nhận một tham số. Đó là chuỗi mà chúng ta cần tìm.
Bạn hãy thực hiện câu lệnh trên với tìm kiếm khớp đã nói ở trên để xem chúng có trả về cùng một tập kết quả không? Câu trả lời có thể là: có và không. Chính sự can thiệp của thứ tự sắp xếp theo mức độ thích hợp đã làm cho tập kết quả này có sự sai khác.
Đặc biệt, mình thích tìm kiếm Fulltext bởi nó hỗ trợ tìm kiếm với các toán tử.
Tìm kiếm toàn văn với toán tử boolean
Bằng cách kết hợp nhiều toán tử bên trong chuỗi tìm kiếm, bạn có thể đưa vào hay loại trừ các từ khác, thay đổi các tổ hợp từ để thay đổi giá trị thích hợp… Sau đây là một số toán tử boolean thường dùng trong MySQL:
  1. + Dấu cộng ở đầu chỉ ra rằng từ này phải xuất hiện ở tất cả các hàng trả lại.
  2. - Dấu trừ ở đầu chỉ ra rằng từ này không được có mặt trong tất cả các hàng trả lại.
  3. Mặc định (khi không có dấu trừ hoặc dấu cộng) từ tìm kiếm là tùy chọn, nhưng hàng nào chứa từ đó sẽ được đánh giá cao hơn.
  4. < > Hai toán tử này được sử dụng để thay đổi phần đóng góp của từ vào giá trị thích hợp của một hàng. Toán tử < làm giảm, còn toán tử > làm tăng phần đóng góp.
  5. ( ) Các dấu ngoặc đơn được sử dụng để nhóm các từ vào một biểu thức con.
  6. ~ Dấu ngã nằm ở đầu có chức năng toán tử phủ định, làm cho phần đóng góp của từ vào giá trị thích hợp của hàng bị phủ định. Kí hiệu này có ích khi dùng để đánh giá các từ gây nhiễu. Một hàng có chứa một từ như vậy sẽ bị đánh giá thấp hơn các hàng khác, nhưng không có nghĩa là nó bị loại trừ, như trường hợp dùng toán tử – .
  7. * Một dấu hoa thị là toán tử cắt bỏ. Không giống như các toán tử khác, nó được nối vào từ chứ không phải đặt nó ở trước từ.
  8. “Mệnh đề được đặt trong dấu nháy kép”, sẽ chỉ so khớp với các hàng có chứa mệnh đề đó.
Hiện nay mình sử dụng thuật toán tìm kiếm này khá nhiều trong các dự án đang làm.

Tìm kiếm với REGEXP BINARY

Giải pháp tìm kiếm này mình học được lúc làm việc với anh Thanh quản lý bên VINEXT.
Hiện mình chưa có thời gian và điều kiện để nghiên cứu về giải pháp này nhưng tạm thời cứ post lên đã cho các bạn test thử:
SELECT * FROM table_name WHERE column_name REGEXP BINARY '^keyword';
Giải pháp này trả về kết quả là tất cả các record có xuất hiện từ khóa keyword.

Các lệnh trong MYSQL


Các lệnh trong MYSQL 


Phát biểu câu SELECT
Giả sử ta có 1 cái table `person` với các field `LastName`,`FirstName`,`Address `,`City` :46[1]:
-----------------------------------------------------\
LastName | FirstName | Address | City
-----------------------------------------------------|
Cuc | Cu | Tổ c*h*i*m** | Bầu trời
Mào | Gà | PHP | Nỏ biết
-----------------------------------------------------/
Bây giờ muốn truy vấn tất cả các giá trị trong table `person` thì chúng ta sử dụng câu lệnh SQL như sau :
SELECT * FROM person
Còn nếu muốn truy vấn vào 1 field nào đó .Chẳng hạn như field `LastName` thì ta sử dụng câu lệnh SQL như sau:
SELECT {tên field} FROM {tên table}
SELECT LastName FROM person
Kết quả : :35[1]:
-------------\
LastName
-------------|
Cuc
Mào
-------------/

Phát biểu SELECT với mệnh đề FROM ,WHERE ,ORDER BY
Phát biểu SQL dạng SELECT là 1 trong những phát biểu yêu cầu MySQL truy vấn dữ liệu trên cơ sở dữ liệu chỉ định.SELECT dùng để đọc thông tin từ cơ sở dữ liệu theo trường trường hợp quy định hay những biểu thức cho trường hợp đó.
Mệnh đề FROM chỉ ra tên 1 bảng hay những bảng có liên quan hệ cần truy vấn thông tin
Mệnh đề WHERE để tạo nên điều kiện cần lọc mẩu tin theo tiêu chuẩn được định nghĩa .Thông thường WHERE dùng cột (trường) để so sánh với giá trị cột khác,hay biểu thức chứa cột (trường) bất kỳ có trong bảng (table)
Phát biểu SQL có dạng
SELECT * FROM {table} WHERE {condictions}
Các phép toán so sánh trong condictions (điều kiện) :
> : lớn WHERE id>10;
< : nhỏ hơn WHERE id<10;
>= :lớn hơn hoặc bằng WHERE id>=10;
<= : nhỏ hơn hoặc bằng WHERE id<=10;
= : bằng WHERE id=1;
!= : khác (ko bằng ) WHERE id!=1;
<> : khác WHERE id<>1;
Các phép toán logic trong condictions:
AND : WHERE `id`=1 AND `username`='admin';
OR : WHERE `id`=1 OR `username`='admin';
NOT : WHERE password is not NULL;
NOT IN: WHERE OrderID NOT IN( '10','20');
BETWEEN : WHERE OrderID BETWEEN 10 And 20;
LIKE: WHERE username LIKE '%hatinh';
NOT LIKE : WHERE usernam NOT LIKE '%hatinh' ;
IN : WHERE OrderID IN ('100','200','300');
Thông thường trong khi truy vấn mẩu tin từ bảng dữ liệu ,kết quả hiển thị sắp xếp theo chiều tăng hay giảm dựa trên ký tự ALPHABET .Nhưng bạn cũng có thể sắp xếp theo 1 tiêu chuẩn bất kỳ .
Cú pháp cho mệnh đề ORDER BY cùng với trạng thái tăng (ASC) ,giảm dần ( DESC )
Cú pháp :
ORDER BY columnname DESC
ORDER BY columnname1 + columnname2 DESC
ORDER BY columnname ASC
ORDER BY columnname1 + columnname2 ASC

Các hàm thông dụng trong MySQL
Các hàm trong Phát biểu GROUP BY
-hàm AVG : hàm trả về giá trị bình quân của cột hay trường (column) trong câu truy vấn
Ví dụ SELECT AVG(amount) FROM tableOrders
-Hàm MIN : hàm trả về giá tri nhỏ nhất của cột hay trường trong câu truy vấn
Ví dụ: SELECT MIN (amount) FROM tableOrders
-hàm MAX: hàm trả về giá tri lớn nhất của cột hay trường trong câu truy vấn
Ví dụ: SELECT MAX (amount) FROM tableOrders
-Hàm Count: hàm trả về số lượng mẩu tin trong câu truy vấn trên bảng
Ví dụ : SELECT Count(*) FROM tableOrders
-Hàm Sum: hàm trả về tổng giá trị của trường (column) , cột ,trong câu truy vấn
Ví dụ : SELECT Sum(amount) FROM tableOrders
-Hàm ASCII : hàm trả về giá trị mã ASCII của ký tự bên trái của chuỗi
Ví dụ : SELECT ASCII ('TOI');
Kết quả : 84
-Hàm Char: hàm này chuyển đổi kiểu mã ASCII từ số nguyên sang dạng chuỗi
Ví dụ : SELECT Char(35)
Kết quả : #
-Hàm UPPER:hàm này chuyển đổi chuỗi sang dạng kiểu chữ hoa
Ví dụ : SELECT UPPER('iamhatinh')
Kết quả : IAMHATINH
-Hàm LOWER :hàm này chuyển đổi chuỗi sang dạng kiểu chữ thường
Ví dụ :SELECT LOWER('IAMHATINH')
Kết quả : iamhatinh
-Hàm Len: hàm này trả về chiều dài của chuỗi:
Ví dụ: SELECT LEN('I Love You')
Kết quả : 10
-Hàm LTRIM : hàm này loại bỏ khoảng trống bên trái của chuỗi:
Ví dụ : SELECT LTRIM(' kekeke');
Kết quả 'kekeke'
-Hàm RTRIM : hàm này loại bỏ khoảng trống bên phải của chuỗi:
Ví dụ : SELECT RTRIM('kekeke ');
Kết quả 'kekeke'
-Hàm LEFT : hàm này trả về chuỗi bên trái tính từ đầu cho đến vị trí thứ n
Ví dụ : SELECT LEFT('iamhatinh',3);
Kết quả :iam
-Hàm RIGHT : hàm này trả về chuỗi bên phải tính từ cuối cho đến vị trí thứ n
Ví dụ : SELECT RIGHT('iamhatinh',3);
Kết quả : inh
-Hàm Instr: hàm trả về vị trí chuỗi bắt đầu của chuỗi con trong chuỗi xét
Ví dụ :SELECT INSTR('hatinh','iamhatinh');
kết quả : 4
4 là tương đương vị trí thứ 4 của chứ hatinh trong chuỗi "iamhatinh"

Các hàm xử lý thời gian trong MySQL
-Hàm CurDate() : hàm trả về ngày,tháng ,năm hiện hành của hệ thống
Ví dụ SELECT curdate() as 'Today is'
Kết quả :
Today is
---------
2007-11-17
-Hàm curtime(): hàm trả về giờ .phút và giây hiện hành của hệ thống
Ví dụ SELECT curtime() as 'Bay gio la'
Kết quả :
Bay gio la
---------
05:12:26
-hàm Period_Diff: hàm trả về số ngày trong khoảng thời gian giữa 2 ngày:
Ví dụ : SELECT Period_Diff(OrderDate,getdate()) as 'So ngay giua ngay thu tien den hom nay'
Kết quả :
So ngay giua ngay thu tien den hom nay
------------------------------------
65
62
-Hàm dayofmonth: hàm dayofmonth trả về ngày thứ mấy trong tháng
Ví dụ : SELECT dayofmonth(curdate()) as ' hom nay ngay'
Kết quả :17
Phát biểu SQL dạng Select với LIMIT N,M ;DISTINCT
Phát biểu SQL dạng SELECT cho phép truy vấn chỉ 1 số mẩu tin tính từ vị trí thứ n đến vị trí thứ m trong Table (theo 1 tiêu chuẩn sắp xếp nào đó) .Để làm điều này,trong phát biểu SQL dạng SELECT bạn chỉ dùng chỉ định từ khóa LIMIT với số lượng mẩu tin cần lấy từ vị trí n đến m
Ví dụ :
SELECT * FROM tablerOrders LIMIT 0,10
Kết quả sẽ trả về 10 mẩu tin đầu tiên trong bảng tableOrders
Bạn có thể sử dụng kết hợp LIMIT với các mệnh đề WHERE ,ODER BY nhằm tạo ra kết quả như ý muốn
Nếu có 1 hay nhiều bảng kết nối với nhau ,sẽ xảy ra tình trạng trùng lặp nhiều mẩu tin.Nhưng trong trường hợp mà bạn chỉ muốn lấy ra 1 mẩu tin trong tập mẩu tin trùng lặp ,bạn sử dụng phát biểu SQL dạng SELECT với chỉ định DISTINCT
Ví dụ:
SELECT DISTINCT id,total ,amount FROM tableOrdersDetails ORDER BY total

NHập dữ liệu bằng phát biểu SQL dạng INSERT
Khi cần thêm mẩu tin vào bảng (table) trong CSDL MySQL ,bạn có nhiều cách để thực hiện công việc này,nhưng để sử dụng các phát biểu SQL mang tính chuyên nghiệp bạn cần sử dụng phát biểu INSERT
Khi thêm dữ liệu ,cần chú ý kiểu dữ liệu giống hoặc tương ứng với kiểu dữ liệu đã khai báo của cột ( column ) ,nếu không phù hợp thì lỗi sẽ phát sinh
.Ngoài ra bạn còn phải quan tâm đến quyền User đang truy cập CSDL.User phải được cấp quyền Insert dữ liệu vào từng table cụ thể (quyền này do Administator xét ).
Muốn INSERT vào CSDL thì ta có cấu trúc như sau:
INSERT INTO <table name>[<column name list>]
Ví dụ
ta muốn dùng phát biểu INSERT vào field username,password , email của bảng (table ) Users với các giá trị admin, admin , [Thành viên mới nhìn thấy link.]
INSERT INTO Users (username,password,email) VALUES ('admin',' admin' , '[Thành viên mới nhìn thấy link.]');
Muốn INSERT vào table từ giá trị của table khác ta dùng cấu trúc
INSERT INTO <table name1>[<columnname list>] SELECT [<columnname list>] FROM <table name2> WHERE <Condictions>
Ví dụ .Ta muốn INSERT vào table UserOrders gồm các field (username,password,email) với các giá trị lấy từ table User và được sắp xếp theo thứ Alphalbet
INSERT INTO UserOrders (username,password,email) SELECT username,password,email FROM User ORDER BY username ASC
Phát biểu SQL dạng UPDATE
Phát biểu SQL dạng UPDATE dùng cập nhật lại dữ liệu đã tồn tại trong bảng.Khi UPDATE dùng cập nhật dữ liệu cho một mẩu tin chỉ định nào đó thừong lệnh này sử dụng chung với mệnh đề WHERE
Nếu cập nhật tất cả các mẩu tin trong bảng bạn có thể bỏ mệnh đề WHERE. Cấu trúc như sau:
UPDATE <table name> SET <column>=<value>,[<column>=<value>] [WHERE <restrictive condictions>]
Nếu cập nhật giá trị là kết quả trả về từ phát biểu SELECT trên 1 hay nhiều bảng khác.Cấu trúc như sau:
UPDATE <table name> SET <column>=<select ... FROM table name WHERE...>[WHERE <restrictive condictions>]
Ví dụ : UPDATE trên toàn bộ các cột dữ liệu từ giá trị cụ thể
-UPDATE cột với giá trị cụ thể
UPDATE Users SET username='newadmin' , password='123456' , email='[Thành viên mới nhìn thấy link.]' WHERE id='1'
-UPDATE 1 cột với giá trị được lấy từ bảng khác
(Giả sử chúng ta muốn update giá trị cho cột Price _nằm trong bảng tableOrders mà giá trị đó được lấy từ giá trị của cột Cost nằm bảng tableItems )
UPDATE tableOrders SET Price (SELECT DISTINCT Cost FROM tableItems WHERE ItemsId=tableOrders.ItemsId ) WHERE Price <1000
Một số hàm tính toán trong MYSQL
Một số hàm tính toán trong MYSQL
giả sử ta có 1 table orders như sau:
id name city add email type money
1 Peter Muller Berlin Am Hechtacker 12 [Thành viên mới nhìn thấy link.] business 30000
2 Erika Kunstig Munchen Geibenstaig 13 [Thành viên mới nhìn thấy link.] business 40000
3 Werner Sauerbier Freiburg Mooswaldalle 34 [Thành viên mới nhìn thấy link.] business 4000
4 Maria Hopfendahl Berlin Kurfüstenstrasse 45 [Thành viên mới nhìn thấy link.] consumer 5000
5 Heiner Muller Bremen Lichtergasse 12 [Thành viên mới nhìn thấy link.] consumer 6000
6 Hans Kohl Dusseldorf Am Markt 45 [Thành viên mới nhìn thấy link.] consumer 70000
7 Werner Glottertal Coburg Am Fels 45 [Thành viên mới nhìn thấy link.] consumer 90000
8 Hans Lutzelschwab Freiburg Am Hertweg 7 lü[Thành viên mới nhìn thấy link.] business 20000
9 Peter Brueg Freiburg Reischstrasse 34 [Thành viên mới nhìn thấy link.] consumer 5000
10 Erika Lachfeld Freiburg Krozinger Strasse 12 [Thành viên mới nhìn thấy link.] business 4000
Cú pháp:
Cú pháp để gọi hàm trong câu lệnh SQL như sau:
SELECT function(tên_cột) FROM tên_bảng
Giờ ta sẽ lần lượt đi hết 1 số hàm thông dụng
Hàm AVG(column)
Hàm AVG trả về giá trị trung bình tính theo cột được chỉ định của các dòng được chọn. Các giá trị NULL sẽ không được xét đến khi tính giá trị trung bình.
Ví dụ:
tính số tiền trung bình của các khách hàng ở Berlin:
Câu lệnh là
SELECT AVG(money) FROM orders WHERE city = 'Berlin'
kết quả trả về sẽ là:
+-------------+
| AVG(money) |
| 17500 |
+-------------+
Kết hợp mệnh đề GROUP BY
Để tính trung bình số tiền các khách hàng mỗi loại consumer và business ta dùng câu lệnh sau:
select type,AVG(money) from orders group by type
Kết quả trả về là:
type AVG(money)
business 19600.0000
consumer 35200.0000
Sử dụng Bí danh (Alias)
select type,AVG(money) as 'so tien trung binh moi loai' from orders group by type
Kết quả trả về là:
type so tien trung binh moi loai
business 19600.0000
consumer 35200.0000
Hàm COUNT([DISTINCT] column(s))
Hàm COUNT đếm các dòng trong CSDL .
Hàm COUNT( * ):
Hàm COUNT( * ) trả về số lượng các dòng được chọn ở trong bảng.
Câu lệnh sau sẽ trả về số lượng các dòng trong bảng:
SELECT COUNT(*) FROM orders
và kết quả trả về sẽ là:
+-------------+
| COUNT(*) |
| 10 |
+-------------+
Câu lệnh sau sẽ trả về số khách hàng ở Freiburg
SELECT COUNT(*) FROM orders where city = 'Freiburg'
và kết quả trả về sẽ là:
+-------------+
| COUNT(*) |
| 4 |
+-------------+
Hàm COUNT(column):
Hàm COUNT(column) sẽ trả về số lượng các dòng có giá trị khác NULL ở cột được chỉ định.
Câu lệnh sau sẽ trả về số lượng những người mà cột add trong bảng không rỗng:

SELECT COUNT(add) FROM orders
Ngoài ra từ khoá DISTINCT và hàm COUNT có thể được dùng chung với nhau để đếm số lượng các kết quả không trùng nhau.
Cú pháp như sau:
SELECT COUNT(DISTINCT column(s)) FROM table
Câu lệnh SQL sau:
SELECT COUNT(DISTINCT city) FROM orders
sẽ trả về kết quả là:
+-----------------------+
| COUNT(DISTINCT city) |
| 6 |
+-----------------------+
nếu ta dùng từ khóa DISTINCT
select DISTINC(city) from orders
Kết quả là:
+-------------------+
| city |
+-------------------+
| Berlin |
| Munchen |
| Freiburg |
| Bremen |
| Dusseldorf |
| Coburg |
+-------------------+

Kết hợp với mệnh đề GROUP BY 1 tí
Để tìm xem mỗi thành phố có bao nhiêu khách hàng
Câu lệnh MYSQL là:
select count(distinct(name)),city from orders group by city
Kết quả sẽ là:
count(distinct(name)) city
2 Berlin
1 Bremen
1 Coburg
1 Dusseldorf
4 Freiburg
1 Munchen
Hàm SUM(column)
Hàm SUM trả về tổng giá trị của cột. Các giá trị NULL sẽ không được xét đến.
Ví dụ:
Tìm tổng số tiền của tất cả những người có trong bảng:
Câu lệnh MYSQL là:
SELECT SUM(money) FROM orders
Kết hợp với mệnh đề GROUP BY
Tìm xem mỗi loại là business và consumer tổng bao nhiêu tiền
Có thể xài câu lệnh MYSQL sau :
select type,sum(money) from orders group by type
Kết quả là:
type sum(money)
business 98000
consumer 176000
Ngoài ra ta có thể tính tổng tiền chi tiết hơn (ngoài theo type còn theo city nữa )
Câu lệnh MYSQL:
select type,city,sum(money) from orders group by type,city;
Kết quả là:
type city sum(money)
business Berlin 30000
business Freiburg 28000
business Munchen 40000
consumer Berlin 5000
consumer Bremen 6000
consumer Coburg 90000
consumer Dusseldorf 70000
consumer Freiburg 5000
Kết hợp thêm hàm COUNT
Câu lệnh MYSQL là:
select type,city, sum(money),count(distinct(name)) from orders group by type,city
Kết quả là:
type city sum(money) count(distinct(name))
business Berlin 30000 1
business Freiburg 28000 3
business Munchen 40000 1
consumer Berlin 5000 1
consumer Bremen 6000 1
consumer Coburg 90000 1
consumer Dusseldorf 70000 1
consumer Freiburg 5000 1
Hàm MAcolumn)
Hàm MAX trả về giá trị lớn nhất trong cột. Các giá trị NULL sẽ không được xét đến.
Tìm xem số $ trả nhiều nhất trong mấy khách hàng kia $-)$-)
Câu lệnh MYSQL:
SELECT MAmoney) FROM orders
Hàm MIN(column)
Hàm MAX trả về giá trị nhỏ nhất trong cột. Các giá trị NULL sẽ không được xét đến.
Để tìm xem mỗi thành phố thì số tiền ít nhất và nhiều nhất mà khách hàng ở thành phố đó phải chi trả , ta dùng câu lệnh sau:
select city, min(money) as 'min tien', max(money) as 'max tien' from orders group by city
Kết quả là:
city min tien max tien
Berlin 5000 30000
Bremen 6000 6000
Coburg 90000 90000
Dusseldorf 70000 70000
Freiburg 4000 20000
Munchen 40000 40000

nguon tu :http://www.qhonline.info