在mySqli中选择不正确返回排序和PHP不区分差异

时间:2018-09-09 00:55:21

标签: php mysqli

我有一个表,其中包含来自某类型业务的16,000多个记录。我正在查询该表以获取每个城市的记录,但是我只显示一次城市,以及该城市中存在业务的实例数。 “ 5号城市”(其中有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 :(得分:0)

其中大部分可以在SQL中完成,而您只有一个简单的循环可以在PHP中完成。

使用GROUP BYCount()获得每个城市的电话号码。使用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,则其所有业务的总数