2011-09-29 5 views
0

Je tire des données de mysql et compte des occurrences de correspondances (apparemment équivalent à WHERE foo='bar'). Cependant, comme je boucle les données dans PHP, mon compte est beaucoup plus bas que le nombre dans mysql.mysql: correspondance exacte?

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

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

Les données peuvent contenir un ou plusieurs &, donc je veux correspondre seulement bar et non bar & foobar. Je suspecte que mysql compte bar et bar & foobar alors que php ne compte que bar et non bar & foobar. Php retourne 1210 et mysql retourne 1783, il est donc tout à fait pratique de compter manuellement pour voir qui est juste ...

Je googlé autour, mais il a été surpris rien de pertinent est venu pour « mysql correspondance exacte » ou « mysql exactement égales "x, x

EDIT

est ici la sql réelle

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

et php réelle

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 

les données de SELECT race FROM database.table ressemble à:

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

Assurez-vous que le code est correct? - $ response est un tableau, donc $ response === 'bar' sera toujours faux, donc $ bar est NULL, ou quelle que soit votre valeur initiale. – johannes

+0

Veuillez poster le code exact avec lequel vous travaillez. Il n'y a aucun moyen que votre php compte quelque chose avec le code que vous avez posté et nous ne pouvons pas déboguer votre code sans le voir. En outre, COUNT() fonctionne dans mysql, et votre SQL est correct. – Ted

+0

@Ted: J'ai posté le code actuel. C'est très impliqué. Je l'ai recyclé depuis un autre compteur qui fonctionne bien ('COUNT()' et la boucle est d'accord). Merci pour toutes les réponses. – jacob

Répondre

2

Vous pouvez le faire:

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

BINARY fait la magie !!!

+0

Merci! Il suffit de regarder l'opérateur 'BINARY' et cela ressemble à quoi J'ai voulu :) – jacob

0

mysql> SELECT COUNT (foo) AS lignes d'database.table OÙ foo = 'bar';

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

Si vous voulez compter les enregistrements où foo est exactement bar, votre requête SQL est correcte.

Il y a un problème avec votre code PHP et le code que vous avez posté ne devrait pas fonctionner du tout (devrait compter 0 enregistrements).

+0

'SELECT COUNT (course) WHERE race = 'WHITE'' et' SELECT COUNT (race) WHERE race =' White'' les deux retournent le même nombre :( – jacob

Questions connexes