代码之家  ›  专栏  ›  技术社区  ›  shin

如何在PHP上获取count(*)。

php
  •  2
  • shin  · 技术社区  · 15 年前

    我有以下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
        )
    ...
    ...
    

    我可以得到日期、课程等,但我不知道如何用PHP获得count(*)。

    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(*)?? 
     ....
     ...
    
    5 回复  |  直到 15 年前
        1
  •  17
  •   fabrik    15 年前

    将基本查询修改为

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

    那么你可以把这个当作

    $list->total
    
        2
  •  9
  •   Hannes    15 年前

    哈,你的处境很奇怪…好吧,显然 count(*) 不是有效的属性名。您可以做3件事:

    1. 使用 $list->{"count(*)"}
    2. 将MySQL查询更改为 count(*) as count 然后使用 $list->count
    3. 更改请求模式,以便获得结果数组而不是stdclass对象
        3
  •  1
  •   markcial    15 年前
    $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";
    }
    

    行动!我的错误,错误的答案,当我看到法布里的答案+1时我抓住了要点。

        4
  •  1
  •   cHao    15 年前

    很明显,你可以得到一些名字很奇怪的属性,比如 $list->{'count(*)'} . 但理想情况下,您需要更改查询。给伯爵一个别名,比如 SELECT ... COUNT(*) cnt ... 因为这样更容易合作。那你就可以 $list->cnt 而不是使用奇怪的语法。

        5
  •  0
  •   Sabeen Malik    15 年前

    编辑: 如果您正在进行分页,并且想要计算可用的记录总数,那么您可能需要用调整查询 SELECT SQL_CALC_FOUND_ROWS * FROM .. 在发送主查询之后,再发送一个查询

    SELECT FOUND_ROWS() as total_records
    

    但是请记住 SQL_CALC_FOUND_ROWS 具有性能影响。

    编辑: 我才意识到我刚刚把问题搞错了,真是愚蠢的回答。把第一部分拿回来:)

    推荐文章