【问题标题】:count columns from sql query从 sql 查询中计算列数
【发布时间】:2012-06-08 06:09:21
【问题描述】:

我正在尝试使用 count() 函数计算从表中选择的行数。但它总是为每个选择了一行/行的查询返回一个“2”,或者为每个没有选择行的查询返回一个“1”。

 $sql_usb="select item_name from req_item where item_name='USB Dongle'";
 $result_usb=mysql_query($sql_usb);
 $row_usb=mysql_fetch_array($result_usb);

 $sql_router="select item_name from req_item where item_name='Access Point/Router'";
 $result_router=mysql_query($sql_router);
 $row_router=mysql_fetch_array($result_router);

 $sql_laptop="select item_name from req_item where item_name='Laptop'";
 $result_laptop=mysql_query($sql_laptop);
 $row_laptop=mysql_fetch_array($result_laptop);

 $usb_inv=count($row_usb);
 $router_inv=count($row_router);
 $laptop_inv=count($row_laptop);


 $total_inv=$usb_inv+$router_inv+$laptop_inv;

我也尝试过添加 isset()(即$usb_inv=count(isset($row_usb));) 和 mysql_num_rows() (即$usb_inv=mysql_num_rows($row_usb));

两者的结果都是 1。

【问题讨论】:

    标签: php mysql sql aggregate-functions


    【解决方案1】:

    你应该使用

    $usb_inv = mysql_num_rows($result_usb);
    

    而不是

    $usb_inv=count($row_usb);
    

    【讨论】:

      【解决方案2】:

      你必须像这样在你的mysql查询中使用count

      $SelectQuery = 'select Count(item_name) as [TotalUSB] from req_item where item_name='USB Dongle'
      

      然后你可以得到结果

      $result = mysql_query($SelectQuery);
      $row = mysql_fetch_array($result);
      
      $USBCount = $row['TotalUSB'];
      

      【讨论】:

        【解决方案3】:

        你应该使用

        SELECT COUNT(*) WHERE ....

        检查doc

        如果只需要总数,那么1条sql就足够了。

        // please add error handing yourself.
        $sql = "select count(*) from req_item where item_name
                where item_name in('USB Dongle', 'Access Point/Router', 'Laptop')";
        $result = mysql_query($sql);
        $row = mysql_fetch_array($result)
        $total = $row[0];
        

        【讨论】:

          【解决方案4】:

          mysql_fetch_array 返回类似

          $row[0] = ...;
          $row[item_name] = ...;
          

          如果你使用数组的计数,它总是返回一个二,
          因为它返回一个包含索引和关联键的数组。

          array mysql_fetch_array (资源 $result [, int $result_type = MYSQL_BOTH])

          mysql_fetch_array — 以关联数组、数值数组或两者的形式获取结果行

          尽管 mysql_fetch_array 使用错误,
          你可能应该只使用一个查询

          $sql ="select item_name from req_item 
                 where item_name in('USB Dongle', 'Access Point/Router', 'Laptop')";
          

          之后,

          $count = array();
          while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
          {
            // do something else ...
          
            // to get count for each item name
            $count[$row["item_name"]]++;
          }
          

          【讨论】:

          • 如果op只需要总数,则不需要这样做。
          • 当然可以,但是谁知道 OP 真正需要什么?你甚至可以看到他在做$row_laptop = ...
          • 是的,OP已经检查了正确的答案,显然没有别的了:)
          【解决方案5】:

          你应该在结果集上使用 mysql_num_rows。

          像这样。

          $usb_inv=mysql_num_rows($result_usb);
          $router_inv=mysql_num_rows($result_router);
          $laptop_inv=mysql_num_rows($result_laptop);
          

          这会给你正确的输出。

          【讨论】:

            猜你喜欢
            • 2023-03-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-16
            • 1970-01-01
            • 2014-10-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多