1

Joomla 1.5 サイトを持っています。私のサイトには、「ステータス」が異なる記事があります。私がやろうとしているのは、「カウント」して、「ステータス = 1」(期限切れ)、「ステータス = 3」(ブロック)、「ステータス = 2」(アクティブ) などの記事の数を表示することです。

これが PhpMyAdmin のステータスです - http://awesomescreenshot.com/07a8ijz75

これが私が書いたものですが、常に同じ結果が得られます-1

<?php echo count($this->row->status==1) ?>

私は何か見落としてますか?ありがとう

4

2 に答える 2

11

SQL カウント関数を使用します。

select count(*) from articles where status = 1;

あなたのDBを使おう!PHPコードでデータベースからのデータをソート、カウントなどしている場合、それは間違っています

すべてのステータスが必要な場合は、次のようにします。

select status, count(*) from articles group by status;
于 2012-06-20T14:23:30.223 に答える
1

PHPのcount関数は、配列内のすべての要素をカウントします。この例では、ブール値を渡しました。結果として、カウントはそれをどう処理するかわからないため、-1を返します。これは有効なカウントではありません。

私のPHPは本当に錆びています(私は長い間使用していません)が、あなたが望むことを達成するための2つの可能な方法があります:

1.関数マップ/リデューススタイルを使用する

<?php
$row[0]->status = 1;
$row[1]->status = 2;
$row[2]->status = 1;
$row[3]->status = 3;
$row[4]->status = 1;

// Count the number of statuses that are equal to 1
echo array_reduce(array_map(function($x) {
    return $x->status == 1 ? 1: 0;
}, $row), function($x, $y) {return $x + $y;});

もちろん、$row変数を$this->rowに置き換える必要があります。コードは基本的に2つのステップで機能しています。内側:

array_map(function($x) {
    return $x->status == 1 ? 1: 0;
}, $row)

1に等しいすべてのステータスが1になり、それ以外はすべて0になるリストを作成します。したがって、「array(1、0、1、0,1)」の配列があります。コードの外側の部分:

array_reduce( ... , function($x, $y) {return $x + $y;});

新しい配列を最初の引数として取り、配列の最初の2つの値を関数に渡してから、後続の各値と最後の関数呼び出しの結果を渡すことにより、すべてを合計します。その結果、すべての値が合計され、一致する値が適切にカウントされます。

2.単純な手続き型を使用する

<?php
$row[0]->status = 1;
$row[1]->status = 2;
$row[2]->status = 1;
$row[3]->status = 3;
$row[4]->status = 1;

// Do it again, but in a procedural style
$num_1_statuses = 0;
foreach ($row as $r) {
    if ($r->status == 1) {
        $num_1_statuses++;
    }
}
echo $num_1_statuses;

これは本当に簡単なはずです。行のステータスが一致するたびにインクリメントされる変数が含まれているだけです。

于 2012-06-20T15:19:58.483 に答える