2 votes

Comment obtenir un count(*) en PHP ?

J'ai les résultats suivants provenant de MySQL.

Array
(
[0] => stdClass Object
    (
        [id] => 19
        [date] => 2010-10-04 11:00:00
        [course] => Yoga
        [course_id] => 19
        [count(*)] => 2
        [capacity] => 20
    )

[1] => stdClass Object
    (
        [id] => 20
        [date] => 2010-10-04 13:00:00
        [course] => Spin
        [course_id] => 20
        [count(*)] => 1
        [capacity] => 24
    )
...
...

Je peux obtenir la date, le cours, etc., mais je ne sais pas comment obtenir le nombre (*) avec PHP.

foreach ($bookingnum as $key => $list){
    echo "<tr valign='top'>\n";
    echo "<td align='center'>".$list->date."</td>\n";
            echo "<td align='center'>".$list->course."</td>\n";
          //  echo "<td align='center'>".$list->count(*)."</td>\n";
         // this is wrong. how to get count(*)?? 
 ....
 ...

17voto

fabrik Points 7073

Modifiez votre requête de base comme suit

SELECT COUNT(*) AS `total` ...

vous pouvez alors l'utiliser comme

$list->total

9voto

Hannes Points 4246

Ha, drôle de situation que vous avez là... Ok, puisque manifestement count(*) n'est pas un nom d'attribut valide, vous pouvez faire trois choses qui vous viennent à l'esprit :

  1. utiliser $list->{"count(*)"}
  2. modifier la requête mysql en count(*) as count et utiliser ensuite $list->count
  3. changer le mode de requête pour obtenir un tableau comme résultat au lieu d'un objet stdClass

1voto

markcial Points 2341
$total = count($bookingnum);
foreach ($bookingnum as $key => $list){
    echo "<tr valign='top'>\n";
    echo "<td align='center'>".$list->date."</td>\n";
    echo "<td align='center'>".$list->course."</td>\n";
    echo "<td align='center'>".$total."</td>\n";
}

ops ! ma faute, mauvaise réponse, j'ai saisi le point quand j'ai vu la réponse de fabrik +1 pour lui

1voto

cHao Points 42294

Vous pouvez apparemment obtenir des propriétés avec des noms bizarres comme $list->{'count(*)'} . Mais dans l'idéal, vous voudrez modifier la requête. Donnez un alias au compte, comme SELECT ... COUNT(*) cnt ... Il sera plus facile de travailler avec. Ensuite, vous pouvez obtenir $list->cnt au lieu de recourir à une syntaxe bizarre.

0voto

Sabeen Malik Points 8542

Editer : Si vous effectuez une pagination et que vous souhaitez connaître le nombre total d'enregistrements disponibles, vous pouvez ajuster votre requête avec SELECT SQL_CALC_FOUND_ROWS * FROM .. et après l'envoi de votre requête principale, envoyez une autre requête

SELECT FOUND_ROWS() as total_records

Toutefois, il faut garder à l'esprit que SQL_CALC_FOUND_ROWS a des conséquences sur les performances.

Edit : Je viens de me rendre compte que je me suis trompé de question, une réponse vraiment idiote je retire la première partie :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X