Подсчет количества строк, возвращаемых из db_query () с помощью инструкции «SELECT»


8

Как найти общее количество возвращаемых строк в db_query()для SELECTзаявления, или эквивалент mysql_num_rows()?

Я использую MySQL.

Ответы:


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

mysql_num_rows устарела в php 5.5.0 и выше, поэтому нам нужно будет использовать доступные альтернативы в будущем.
Скотт Лахтейн

и 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
Циклы - это все, чего я хочу избежать. Я также хочу избежать другого запроса ..
AgA

Если это так, вы должны указать это в своем вопросе, чтобы не разочаровываться в ответах и ​​не голосовать против них;)
tostinni

0

Для Drupal 7 вы можете использовать

$result = db_query($query);
$result->rowCount();

Для Drupal 7, это путь.
stefgosselin

Нет, потому что rowCount()только для запросов, которые влияют на строки, такие как INSERT / UPDATE / DELETE. Смотрите обсуждение на drupal.org/node/1286238
Даниэль Верите
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.