Archive

Archive for the ‘MySQL’ Category

MySQL query lasted post by each category

Cách truy vấn lấy 1 mẫu tin mới nhất của mỗi danh mục category:

 


SELECT * FROM blog AS a
INNER JOIN (
SELECT min(date_add) AS date_posted FROM blog GROUP BY category
) recent ON (recent.date_posted = a.date_add) AND a.avail = 1

 

nhantam
PHP Developer

thiết kế web Panpic.vn

Categories: MySQL

MySQL split string

1. Tạo function

CREATE FUNCTION SPLIT_STRING(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');

 

2. Cách dùng

SELECT SPLIT_STRING(string, delimiter, position)

 

3. Ví dụ

SELECT SPLIT_STR('aaa|bbb|ccc|ddd', '|', 2) as two;

+-------+
| two   |
+-------+
| bbb   |
+-------+

nhantam
Thiết kế web

Categories: MySQL

Tối ưu truy vấn Mysql – MySQL optimize query

Tối ưu truy vấn mysql, tăng tốc độ thực thi câu lệnh:

Ví dụ: bài toán yêu cầu chúng ta truy vấn các sản phẩm có Giá nằm trong khoảng 20000 đến 60000

SELECT COUNT(*) FROM products WHERE price BETWEEN 20000 AND 60000;

//output – xuất ra tổng số sản phẩm có giá nằm trong khoảng

Câu truy vấn trên là đúng, nhưng với các dự án có dữ liệu hoặc các bảng (table) lưu trữ lớn thì việc thực thi sẽ rất chậm. (thường các nhà phát triển yêu cầu thực thi bằng mili giây)

Vậy làm thế nào để cải thiện hoặc tăng tốc độ truy xuất ? ngoài việc tối ưu câu truy vấn, MySQL cung cấp một kiểu định dạng INDEX. Như phần chú giải của MySQL đây là cách thực thi nhanh nhất (The best way to improve the performance)

Chúng ta phát biểu INDEX cho trường price như sau:

ALTER TABLE products ADD INDEX ( price);

Sau đó chúng ta hay thử gọi lại câu truy vấn bên trên để thấy sự khác biệt

SELECT COUNT(*) FROM products WHERE price BETWEEN 20000 AND 60000;

Ghi chú:

– Sẽ không có sự khác biệt nhiều nếu bảng lưu trữ dữ liệu ít (số records)…bạn chỉ thấy sự khác biệt khi bảng dữ liệu lưu trữ có tới hàng trăm ngàn records..

Các bạn tham khảo thêm tại: http://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html

Chúc thành công

nhantam
Best vietnamese web developer team

Tạo View trong MySQL có tham số (mysql view parameters)

Như các bạn đã biết MySQL hỗ trợ phần back-end khá tốt như VIEW, FUNCTION, Store Procedue. Các chức năng hỗ trợ bảo mật & thực thi truy vấn nhanh hơn.
nhantam giới thiệu về cách tạo VIEW có tham số

Ví dụ: Tạo VIEW lấy san phẩm thuộc một danh mục nào đó, các bạn phát biểu như sau:

Bước 1: Tạo function


CREATE FUNCTION category() RETURNS int(12)
RETURN @category_id;

Bước 2: Tạo VIEW


CREATE VIEW view_products AS
SELECT * FROM products WHERE category_id = category();

Bước 3: Cách gọi


SET @category_id = 2;
SELECT * FROM view_products; //output các sản phẩm có danh mục bằng 2

>> Còn tiếp

Chúc các bạn thành công

nhantam
Vietnamese web developer team
http://panpic.com.vn

Maximum table we have a mysql database

1. Limits on Number of Databases and Tables (giới hạn số table trong một CSDL MySQL)

Theo thông tin trên MySQl version 5.0, MySQl không giới hạn số table trong một CSDL. Khi thiết kế CSDL với kiểu engine InnoDB còn hỗ trợ lên tới 4 tỷ table, một con số rất lớn đáp ứng đủ cho các hệ thống website lớn.

MySQL has no limit on the number of databases. The underlying file system may have a limit on the number of directories.
MySQL has no limit on the number of tables. The underlying file system may have a limit on the number of files that represent tables. Individual storage engines may impose engine-specific constraints. InnoDB permits up to 4 billion tables.

2. Limits on Table Size (dung lựng lưu trữ của một bảng)
Tuy nhiên dung lượng lưu trự lại trên một table lại bị giới hạn, tùy theo định dạng của từng hệ thống

The effective maximum table size for MySQL databases is usually determined by operating system constraints on file sizes, not by MySQL internal limits. The following table lists some examples of operating system file-size limits. This is only a rough guide and is not intended to be definitive. For the most up-to-date information, be sure to check the documentation specific to your operating system.

Operating System File-size Limit
Win32 w/ FAT/FAT32 2GB/4GB
Win32 w/ NTFS 2TB (possibly larger)
Linux 2.2-Intel 32-bit 2GB (LFS: 4GB)
Linux 2.4+ (using ext3 file system) 4TB
Solaris 9/10 16TB
MacOS X w/ HFS+ 2TB
NetWare w/NSS file system 8TB

Windows users, please note that FAT and VFAT (FAT32) are not considered suitable for production use with MySQL. Use NTFS instead.

nhantam
Web Design & Development in Ho Chi Minh (Saigon)

Cách truy vấn lẫy giữ liệu vòng tròn – mysql query prev next row

Giả sử chúng ta có CSDL như sau


CREATE TABLE Product
	(`id` int, `value` int)
;
	
INSERT INTO Product
	(`id`, `value`)
VALUES
	(1, 100),
	(2, 150),
	(3, 200),
	(4, 250),
	(5, 300)
;

Yều cầu:
bài toàn yêu cầu chúng ta truy vấn MySQL lấy id theo thứ tự vòng tròn từ 1 đến 5

MySQl Query:


SELECT t.id, first_id, prev_id, next_id 
FROM
(
  	SELECT t.id, 
  	(
		SELECT id FROM Product ORDER BY id ASC LIMIT 1
  	) first_id,
  	(
		SELECT id FROM Product WHERE id  t.id ORDER BY id LIMIT 1
  	) next_id
	FROM Productt WHERE t.id = 3
) t 
LEFT JOIN Productp ON t.prev_id = p.id 
LEFT JOIN Productn ON t.next_id = n.id 

Kế quả truy vấn – Result:

| ID |FIRST_ID| PREV_ID | NEXT_ID |
|—-|————|————- |————-|
| 3  |        1     |      2         |     4          |

Chúc các bạn thành công

nhantam
Web Developer, PHP Developer
thiết kế web

MySQL change collate type

Khi tạo table trong MySQL đôi khi chúng ta quên mất kiểu collate type (đôi khi ảnh hướng dữ liệu kiểu tiếng Việt).  MySQL sẽ tạo collate mặc định là latin1_swedish_ci

Vậy nếu đã lỡ tạo table với collate type mặc định latin1_swedish_ci / và làm thế nào để convert lại collate type kiểu hỗ trợ tiếng Việt một cách tốt nhất (UTF-8 – utf8_general_ci).

Chúng ta thực thi câu lệnh sau:
1. Convert collate


ALTER TABLE table_product CONVERT TO CHARACTER SET utf8 collate utf8_unicode_ci;

2. Để kiểm tra collate các tables của một cơ sở dữ liệu (database)


SELECT * FROM information_schema.TABLES 
WHERE table_schema = 'ten_db_name' AND table_collation != 'utf8_bin';

Chúc các bạn thành công

nhantam
PHP Developer
Công ty làm web Panpic