2011-09-29 143 views
0

我从MySQL提取一些数据并计算匹配项的出现次数(看起来相当于WHERE foo='bar')。但是,当我通过PHP循环数据时,我的计数远远低于mysql中的计数。mysql:完全匹配?

MYSQL> SELECT COUNT(foo) FROM database.table WHERE foo='bar';

# PHP 
while ($response = mysql_fetch_assoc($surveydata)){ 
    if ($response==='bar') { 
     $bar++; 
    } 
} 

数据可能包含一个或多个&,所以我想只匹配bar而不是bar & foobar。我怀疑MySQL计数barbar & foobar而php只计算bar而不是bar & foobar。 PHP是返回1210,和MySQL将返回1783,所以它的确切实用的手动计数,看看谁是正确的...

我GOOGLE了四周,但很惊讶没有相关想出了“mysql的精确匹配”或“MySQL的完全相等“X,X

编辑

这里的实际的SQL

SELECT COUNT(`race`) FROM `database`.`table` WHERE `completion status`='complete'; 

和实际PHP

mysql_query("SELECT `race`,`etcetera` FROM `database`.`table` WHERE `completion status`='complete';"); 

$demographics=array(
    "race"=>array(
     "White"=>array('consented'=>0,'partial'=>0,'completed'=>0), 
     "Black"=>array('consented'=>0,'partial'=>0,'completed'=>0), 
     "Hispanic"=>array('consented'=>0,'partial'=>0,'completed'=>0), 
     "Asian"=>array('consented'=>0,'partial'=>0,'completed'=>0), 
     "Pacific Islander"=>array('consented'=>0,'partial'=>0,'completed'=>0), 
     "Multiracial"=>array('consented'=>0,'partial'=>0,'completed'=>0), 
     "Other"=>array('consented'=>0,'partial'=>0,'completed'=>0) 
    ) 
    //more 
); 

while ($dbrecord = mysql_fetch_assoc($surveydata)) { 
    foreach ($dbrecord as $dbfield=>$dbcellval) { 
     foreach ($demographics as $demographic=>&$options) { 
      foreach ($options as $option=>&$counter) { 
       if ($option==="Multiracial" && strpos($dbcellval,'&') >0 && strpos($dbcellval,'&')!==false) { 
        if ($dbrecord['consent']==="1"){ 
         $demographics["race"]["Multiracial"]['consented']++; 
         if ($dbrecord['completion status']==="partial") { 
          $demographics["race"]["Multiracial"]['partial']++; 
         } // if 
         else if ($dbrecord['completion status']==="complete") { 
          $demographics["race"]["Multiracial"]['completed']++; 
         } // else if 
        } // if 
       } 
       else if ($option===$dbcellval){ 
        if ($dbrecord['consent']==="1"){ 
         $counter['consented']++; 
         if ($dbrecord['completion status']==="partial") { 
          $counter['partial']++; 
         } // if 
         else if ($dbrecord['completion status']==="complete") { 
          $counter['completed']++; 
         } // else if 
        } // if 
       } // else if $option==$item 
      } // foreach $options 
     } // foreach $demographics 
    } // foreach $dbrecord 
} // while 

SELECT race FROM database.table数据的模样:

White & Black 
White 
White & Asian 
White & Asian & Black 
Asian 
Asian & Black 
// etc 
+3

确保代码正确? - $ response是一个数组,所以$ response ==='bar'将始终为false,因此$ bar为NULL,或者任何初始值。 – johannes

+0

请发布您正在使用的确切代码。你的PHP没有办法用你发布的代码来计算任何东西,我们不能在没有看到代码的情况下调试你的代码。另外,COUNT()在mysql中工作,并且你的sql是正确的。 – Ted

+0

@Ted:我发布了实际的代码。这很相关。我从另一个工作正常的计数器('COUNT()'和循环同意)回收它。感谢所有的答复。 – jacob

回答

2

你可以这样做:

MYSQL> SELECT COUNT(foo) FROM database.table WHERE BINARY foo='bar'; 

二进制文件没有魔法!

+0

Thanks!刚看过'BINARY'运算符,看起来像什么我想了 :) – jacob

0

MYSQL> SELECT COUNT(FOO)AS行FROM database.table其中foo = '酒吧';

$response = mysql_fetch_assoc($surveydata); 
echo $response['rows']; 
1

如果要算记录,其中foo正是bar,您的SQL查询是正确的。

您的PHP代码有问题,您发布的代码根本无法工作(应计为0条记录)。

+0

'SELECT COUNT(race)WHERE race ='WHITE''和'SELECT COUNT(race)WHERE race ='White'' both returns the same count :( – jacob