2011-09-29 5 views
0

mysql에서 일부 데이터를 가져 와서 일치 항목을 계산합니다 (WHERE foo='bar'과 같음). 그러나 PHP에서 데이터를 반복 할 때 내 계산 수가 mysql의 계산보다 훨씬 적습니다.mysql : exact match?

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

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

데이터는 하나 이상의 &을 포함 할 수 있습니다, 그래서 난 단지 bar하지 bar & foobar 일치합니다. 나는 barbar & foobar을 계산하고 mysql은 bar이 아니라 bar & foobar이 아니라고 생각한다. PHP는 1210를 반환하고, MySQL은 1783를 반환, 그래서 수동으로 누가 옳다고 볼 수에 정확히 실용적 ...

내가 주변에 인터넷 검색,하지만 관련 아무것도 또는 "정확히 동일한 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'; 

BINARY 마법을한다!

+0

) 'BINARY'연산자를 찾아 보았는데 내가 원했던 :) – jacob

0

MYSQL database.table WHERE foo는 = '막대'의 행 AS> SELECT COUNT (foo에); foo 정확히 bar입니다 당신이 레코드를 계산하려면

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

, 당신의 SQL 쿼리는 올바른 것입니다.

PHP 코드에 문제가있어 게시 한 코드가 전혀 작동하지 않아야합니다 (0 레코드로 계산해야 함).

+0

'레이스 = '화이트'와 '레이스 선택 = 화이트'모두 같은 카운트를 반환합니다. ( – jacob