Выберите в mySqli, не возвращая сортировку правильно и PHP не различая различия - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть таблица, которая содержит более 16 000 записей из определенного типа бизнеса. Я запрашиваю эту таблицу, чтобы получить информацию о каждом городе, но отображаю город только один раз с количеством экземпляров, в которых бизнес существует в этом городе. «Город № 5» (у Сити пять таких предприятий), но я получаю повторения некоторых городов, как будто их названия отличаются, и они выходят из строя, но после проверки они не отличаются.

Я проверил наличие пробелов или отсутствие пробелов и не могу понять, почему запрос думает, что некоторые компании не совпадают с именами, хотя на самом деле это так. Есть ли способ быть более конкретным в моем сравнении?

Пример вывода:

Ft Collins #1
Ft Morgan #1
Ft Collins #87
Ft Garland #1
Ft Morgan #13

(обратите внимание на Форт-Коллинза и Форт-Моргана: это было скопировано и вставлено)

Это код:

$rscc = sQ("SELECT corsCity FROM      corsf
                        ORDER BY  corsCity    ASC");

if(!$rscc) {
    echo "Houston... we have a problem!";
}
else {
    $rows        = 0;
    $totalcities = 0;
    $totalrows   = 0;
    $lastcity    = 'xxxx';

    while($ccrow = mysqli_fetch_assoc($rscc)) {
        $currentcity = $ccrow['corsCity'];
        if ($lastcity != $currentcity) {
            if ($lastcity != 'xxxx') {
                $rows++;
                $totalcities++;
                echo "$lastcity #$rows <br>";
                $rows = 0;
            }
            $lastcity = $currentcity;
            $totalrows++;
        }
        else {
            $rows++;
            $totalrows++;
        }
    }

    echo "Total cities = $totalcities <br>";
    echo "Total businesses = $totalrows <br>";
}

$rscc->close();

Кстати, "sQ" означает "$connection->query".

1 Ответ

0 голосов
/ 09 сентября 2018

Большая часть этого может быть выполнена в SQL, и у вас есть только простой цикл в PHP.

Используйте GROUP BY и Count(), чтобы получить числа для городов.Используйте WITH ROLLUP для вычисления итогов (и промежуточных итогов, если у вас есть несколько столбцов в GROUP BY, что не соответствует вашему случаю)

SELECT corsCity AS City, COUNT(*) AS Nbr
FROM corsf 
GROUP BY corsCity WITH ROLLUP
ORDER BY corsCity

Ваш запрос вернет:

City        |   Nbr
-------------------
Chicago     |   8
Houston     |   10
Los Angeles |   2   
New York    |   5
NULL        |   25

ЕслиГород NULL, это общая сумма всех предприятий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...