2010-05-26 32 views
6

Nếu tôi cần phải biết tổng số hàng trong một bảng của cơ sở dữ liệu tôi làm điều gì đó như thế này:Cách nhanh hơn để biết tổng số hàng trong cơ sở dữ liệu MySQL?

$query = "SELECT * FROM tablename WHERE link='1';"; 
$result = mysql_query($query); 
$count = mysql_num_rows($result); 

Cập nhật: Tôi đã phạm sai lầm, ở trên là cách thực tế của tôi. Tôi xin lỗi tất cả

Vì vậy, bạn thấy tổng số dữ liệu được phục hồi quét qua toàn bộ cơ sở dữ liệu.

Có cách nào tốt hơn không?

+1

Về mặt kỹ thuật , số đếm ($ rows) gọi là đếm các hàng trong mảng $ rows trong PHP-land, không phải bằng cách quét cơ sở dữ liệu trong vùng cơ sở dữ liệu. –

+2

Trong khi phương pháp của bạn không tối ưu, nó cũng sai. Bạn sẽ nhận được số trường, không phải hàng. Nhân với 2. –

+2

Bạn có muốn liên kết = '1' không? Nếu * tất cả * các bản ghi của bạn trong bảng đó có liên kết = '1', thì bạn sẽ nhận được tổng số tất cả các bản ghi trong bảng đó bằng cách sử dụng các ví dụ bên dưới, nhưng thường không phải như vậy. Nếu bạn thực sự muốn nhận tất cả hồ sơ, tôi sẽ xóa liên kết = '1'. –

Trả lời

18
$query = "SELECT COUNT(*) FROM tablename WHERE link = '1'"; 
$result = mysql_query($query); 
$count = mysql_result($result, 0);

Điều này có nghĩa là bạn không chuyển tất cả dữ liệu giữa cơ sở dữ liệu và PHP, rõ ràng là lãng phí thời gian và tài nguyên.

Đối với những gì đáng giá, mã của bạn sẽ không thực sự đếm số hàng - nó sẽ cung cấp cho bạn gấp 2 lần số cột, khi bạn đếm số lượng mục trong một mảng đại diện cho một hàng (và mysql_fetch_array cung cấp cho bạn hai mục trong mảng mỗi cột - một số và một cho tên cột)

+0

Tôi đã cập nhật câu hỏi của mình. Vui lòng xem – Starx

+1

@Starx Câu trả lời vẫn giống nhau :) – Chris

10
SELECT COUNT(*) FROM tablename WHERE link='1'; 
+0

Tất nhiên tôi sẽ thay thế * bằng một trong các tên cột – Pedro

+0

@Pedro - nó có thể không tạo ra sự khác biệt nhiều. – ChrisF

+3

@Pedro và cộng sự, bạn nên _không sử dụng tên cột.Điều đó không tính giá trị NULL trong cột đó. Một số người đề nghị sử dụng số lượng (1) vì nó nhanh hơn, nhưng đó là rác rưởi trong tất cả nhưng phần lớn DBMS chết não. – paxdiablo

4

Bạn chỉ có thể làm:

SELECT count(*) FROM tablename; 

cho truy vấn của bạn. Kết quả sẽ là một cột đơn chứa số hàng.

+0

Tôi đã cập nhật câu hỏi của mình. Vui lòng xem – Starx

3

Nếu tôi cần phải biết tổng số hàng trong một bảng của cơ sở dữ liệu

có lẽ tôi là m thiếu một cái gì đó ở đây nhưng nếu bạn chỉ muốn có được tổng số hàng trong một bảng bạn không cần điều kiện WHERE. Chỉ cần làm điều này:

SELECT COUNT(*) FROM tablename 

Với điều kiện WHERE bạn sẽ chỉ đếm số hàng đáp ứng điều kiện này.

+0

+1 - lưu ý hữu ích về điều kiện WHERE. –

+0

Tôi đã cập nhật câu hỏi của mình. Vui lòng xem – Starx

0

http://php.net/manual/en/function.mysql-num-rows.php Bạn cần điều này tôi nghĩ.

+0

-1 Ý tưởng tồi. Điều này yêu cầu bạn thực thi truy vấn đầy đủ. Một 'SELECT count (*)' là thế giới hiệu quả hơn. – Kenaniah

+1

@Kenaniah: Không hẳn là một ý tưởng tồi. Nếu tất cả những gì OP đang tìm kiếm là số hàng, thì có, đó là một ý tưởng tồi. Tuy nhiên, nếu OP cần dữ liệu trong các thao tác khác, thì 'mysql_num_rows()' có thể phù hợp hơn. – Joseph

+0

@Joseph, đã đồng ý với các ngữ cảnh khác. Nhưng trong bối cảnh của * câu hỏi * này, đó là một ý tưởng tồi. – Kenaniah

0

Nếu bạn đang sử dụng các câu lệnh SQL sau:

SELECT COUNT(*) FROM tablename WHERE link='1'; 

Hãy chắc chắn rằng bạn có một chỉ mục trên 'liên kết' cột

+0

Tôi đã cập nhật câu hỏi của mình. Vui lòng xem – Starx

1

sử dụng mã dưới đây

$qry=SHOW TABLES FROM 'database_name'; 
$res=mysql_query($qry); 
$output=array(); 
$i=0; 
while($row=mysql_fetch_array($res,MYSQL_NUM)){ 
     ++$i; 
     $sql=SELECT COUNT(*) FROM $row[0]; 
     $output[$i]=mysql_query($sql); 
} 
$totalRows=array_sum($ouptput); 
echo $totalRows; 
+0

whwy downvoted ??? atleast viết một số lý do xin vui lòng .. để tôi có thể cập nhật kiến ​​thức của tôi – diEcho

Các vấn đề liên quan