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
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
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
@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