MySQL: точное совпадение? - PullRequest
       35

MySQL: точное совпадение?

0 голосов
/ 30 сентября 2011

Я извлекаю некоторые данные из mysql и подсчитываю совпадения (похоже, эквивалентно WHERE foo='bar'). Однако, когда я перебираю данные в PHP, мой счет намного ниже, чем в 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, так что очень удобно вручную посчитать, чтобы увидеть, кто прав ...

Я гуглил вокруг, но был удивлен, что ничего подходящего не пришло для "точного совпадения mysql" или "точно равного mysql" x, x

EDIT

вот фактический 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 ]

2 голосов
/ 22 октября 2012

Вы можете сделать это:

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

БИНАРЬ творит чудеса !!!

1 голос
/ 30 сентября 2011

Если вы хотите посчитать записи, где foo точно равно bar, ваш запрос SQL верен.

Что-то не так с вашим PHP-кодом, и код, который вы разместили, не должен работать вообще (должно содержать 0 записей).

0 голосов
/ 30 сентября 2011

MYSQL> SELECT COUNT (foo) AS строк из базы данных.table WHERE foo = 'bar';

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