2010-05-26 33 views
6

如果我需要知道在数据库的表中的行总数我做这样的事情:知道MySQL数据库中总行数的更快方法?

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

更新时间:我犯了一个错误,以上就是我的实际方式。我向所有的道歉

因此,你看到的数据总数恢复扫描通过整个数据库。

有没有更好的方法?

+1

技术上count($ rows)调用正在计算PHP-land中$ rows数组中的行,而不是通过扫描数据库中的数据库。 – 2010-05-26 17:03:04

+2

虽然你的方法不是最优的,但它也是错误的。你会得到数量的领域,而不是行。乘以2. – 2010-05-26 17:06:40

+2

你想链接='1'?如果该表中所有*记录的链接都为'1',那么您将使用下面的示例来计算该表中所有记录的计数,但通常情况并非如此。如果你真的想获得所有记录,我会删除link ='1'。 – 2010-05-26 17:12:17

回答

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

这意味着你没有在数据库和PHP之间传输所有数据,这显然是时间和资源的巨大浪费。因为你计算的是代表单行的数组中的项目数量(和),因此你的代码实际上不会计算行数 - 它会给你两倍的列数,因为你要计算一个数组中的项目数mysql_fetch_array为您提供每列阵列中的两个项目 - 一个数字,一个用于列名)

+0

我已更新我的问题。请参阅 – Starx 2010-05-27 00:51:07

+1

@Starx答案仍然相同:) – Chris 2010-05-27 10:01:24

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

当然,我会用其中一列名称 – Pedro 2010-05-26 16:59:16

+0

@Pedro替换* - 它可能没有太大区别。 – ChrisF 2010-05-26 17:00:35

+3

@Pedro等人,你不应该使用列名。这不会计算该列中的NULL值。有些人建议使用count(1),因为它速度更快,但除了大脑死亡的DBMS之外,这些都是垃圾。 – paxdiablo 2010-05-26 17:07:47

4

你可能只是做:

SELECT count(*) FROM tablename; 

为您的查询。结果将是包含行数的单个列。

+0

我已更新我的问题。请参阅 – Starx 2010-05-27 00:53:52

3

如果我需要知道的行总数数据库的表

也许我m在这里丢失了一些东西,但如果你只是想获得表中的总行数,你不需要WHERE条件。只需执行以下操作:

SELECT COUNT(*) FROM tablename 

使用WHERE条件,您将只计算满足此条件的行数。

+0

+1 - 有助于说明WHERE条件。 – 2010-05-26 17:12:50

+0

我已更新我的问题。请参阅 – Starx 2010-05-27 00:53:35

0
+0

-1坏主意。这要求您执行完整的查询。 'SELECT count(*)'世界更高效。 – Kenaniah 2010-05-26 18:10:46

+1

@Kenaniah:不一定是个坏主意。如果OP正在寻找的是行数,那么是的,这是一个坏主意。但是,如果OP需要其他操作中的数据,那么'mysql_num_rows()'可能更适合。 – Joseph 2010-05-26 19:20:27

+0

@约瑟夫,同意其他情况。但在*这个问题的背景下,这是一个坏主意。 – Kenaniah 2010-05-26 21:07:35

0

如果你要使用下面的SQL语句:

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

确保您对 '链接' 列的索引

+0

我已更新我的问题。请参阅 – Starx 2010-05-27 00:53:17

1

使用下面的代码

$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 ???至少请写一些理由..以便我可以更新我的知识 – diEcho 2010-06-08 19:11:17

相关问题