2010-05-03 66 views
1

我有我的SQL查询返回以下的var转储php array count

我想在下面的数组中计数myID = 5有多少行在那里。我将如何做到这一点。我正在使用PHP。在此先感谢

array 
    0 => 
    object(stdClass)[17] 

     public 'myID' => string '5' (length=1) 
     public 'data' => string '123' (length=3) 
    1 => 
    object(stdClass)[18] 

     public 'myID' => string '5' (length=1) 
     public 'data' => string '123' (length=3) 
    2 => 
    object(stdClass)[19] 

     public 'relativeTypeID' => string '2' (length=1) 
     public 'data' => string '256' (length=3) 
    3 => 
    object(stdClass)[20] 

     public 'myID' => string '4' (length=1) 
     public 'data' => string '786' (length=3) 

    object(stdClass)[21] 

     public 'myID' => string '4' (length=1) 
     public 'data' => string '786' (length=3) 
+0

您确定要执行查询,然后使用PHP计算该查询的某些内容吗?编写一个只返回你关心的元组的查询会更有意义,然后看看有多少结果(如果你要使用它们中的数据,否则查询最好是一个count查询本身) – Jasper 2010-05-03 22:08:22

回答

2

你总是有data为同一myID相同的值?换句话说,data在功能上依赖于myID

如果是这样,你可以得到数据库来为你做这个:

SELECT myID, data, COUNT(*) AS cnt 
FROM (your query here) 
GROUP BY myID, data 

这将使你像下面这样的结果:

myID data cnt 
'5' '123' 3 
'2' '256' 1 
'4' '786' 2 
+0

womderful 。谢谢! – Autolycus 2010-05-03 23:00:21

+0

我的建议是不要使用COUNT(*),因为这被认为是不好的做法(在许多不同的情况下效率不高)。尝试做一个计数(myID)。这并非总是如此(我知道InnoDB中有一个快速计数(*)),但作为一般规则,最值得依赖的是特定列。 – 2010-05-04 15:54:35

+0

这应该是上面的COUNT(星号),而不是COUNT()。并忽略斜体。我不好意思记得减价,现在我似乎无法编辑我的评论。 – 2010-05-04 19:55:29

-1

或者,你可以使用一个foreach语句,如:

$count = 0; 

foreach($arr as $item) 
{ 
    // Given that your item is an stdClass Object you access its property with "->" 
    // if an array $item["myID"] instead 
    if ($item->myID == '4') 
    { 
     $count ++; 
    } 
} 
+0

投票并且没有评论? – falomir 2010-05-03 23:08:25

+0

downvote不是我的(你的解决方案在技术上是正确的,所以我不认为它值得dv),但我猜测批评是这将是非常低效的。这是最好在数据库中进行计数的情况。 – 2010-05-04 15:34:57