用“ SELECT”语句计算从db_query()返回的行数


8

如何找到行的返回总数db_query()SELECT声明,或相当于mysql_num_rows()

我正在使用MySQL。

Answers:


6

如果您查看db_result()Drupal 6 的文档:

function db_result($result) {
   if ($result && mysql_num_rows($result) > 0) {
    // The mysql_fetch_row function has an optional second parameter $row
    // but that can't be used for compatibility with Oracle, DB2, etc.
    $array = mysql_fetch_row($result);
    return $array[0];
   }
   return FALSE;
}

我还看到您可以在Drupal 6中做到这一点:

$num_rows = db_result(
  db_query("SELECT COUNT(*) FROM {node} WHERE type = '%s'", $type->type)
);

看来您可以简单地做到:

// Execute your query.
$result = db_query($your_query);
// Use mysql_num_rows() on the result set.
$num_rows = mysql_num_rows($result);

mysql_num_rows?是的,我也看到过类似的东西。这样就可以了。这很棒 !
AgA 2011年

mysql_num_rows在PHP 5.5.0及更高版本中已弃用,因此将来我们将需要使用可用的替代方法。
Scott Lahteine 2014年

和db_result在Drupal 7中弃用了
wranvaud

@Drilix-如果看这个问题,它被标记为drupal 6而不是
7。– Cyclonecode

6
$res = db_query("SELECT title FROM {node} WHERE  status = '%d'",  1);

db_query()返回一个对象,您可以使用来检查总行数$res->num_rows


1

这取决于在循环结果集之前是否需要行数。

如果以前需要,则通常使用SELECT COUNT(*)与第一个查询相同的参数进行查询,并用于db_result()检索它。

如果以后需要它,只需在循环中放入一个变量即可递增:

$result = db_query("SELECT nid, title FROM {node} WHERE status = 0");
$total_rows = 0;

while ($row = db_fetch_array($result)) {
  //Process your results here

  //Increment your counter
  $total_rows++;
} 

1
我想避免循环。我也想避免再次查询..
阿迦

如果是这样的话,您应该在问题中指定这个选项,以避免对答案感到失望和
不满意

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.