我从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计数bar
和bar & 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
确保代码正确? - $ response是一个数组,所以$ response ==='bar'将始终为false,因此$ bar为NULL,或者任何初始值。 – johannes
请发布您正在使用的确切代码。你的PHP没有办法用你发布的代码来计算任何东西,我们不能在没有看到代码的情况下调试你的代码。另外,COUNT()在mysql中工作,并且你的sql是正确的。 – Ted
@Ted:我发布了实际的代码。这很相关。我从另一个工作正常的计数器('COUNT()'和循环同意)回收它。感谢所有的答复。 – jacob