如何加入两个mysql语句并获取大数据的计数

nir*_*ala 2 php mysql

目前我的代码是这样的:

<?php 
$qall = $db->query("SELECT * FROM location_code 
WHERE 
StateCode='".$secureStateCode."'");
while($fall = $db->fetch($qall)) {
?>
<tr>
  <th><?php echo $fall['StateCode']; ?></th>
  <td><?php echo $fall['StateName']; ?></td>
  <td>
  <?php
    $query = $db->query("SELECT COUNT(*) AS `male_count` 
    FROM `all_users` 
    WHERE `Sex`='M' 
    AND 
    `StateCode`='{$fall['StateCode']}'");
    $data  = $db->fetch($query);
    echo $data['male_count']; 
    ?>
  </td>
  <td>
  <?php
    $query = $db->query("SELECT COUNT(*) AS `female_count` 
    FROM `all_users` 
    WHERE `Sex`='F' 
    AND 
    `StateCode`='{$fall['StateCode']}'");
    $data  = $db->fetch($query);
    echo $data['female_count']; 
    ?>
  </td>
  <td>Total male_count + female_count</td>
</tr>
<?php } ?>
Run Code Online (Sandbox Code Playgroud)

如何组合这些查询并使其加载速度更快,以满足男性和女性的需求.目前我有大约50万用户.

Der*_*sed 6

$db->query("
    SELECT
        `Sex`,
        COUNT(*) AS count,
    FROM
        `all_users` 
    WHERE 
        `StateCode` = '{$fall['StateCode']}'
    GROUP BY 
        `Sex` WITH ROLLUP
");
Run Code Online (Sandbox Code Playgroud)

应该返回三行,如下所示:

----------------
+ Sex  + count +
----------------
+  F   + 12345 +
+  M   + 54321 +
+ null + 66666 +
----------------
Run Code Online (Sandbox Code Playgroud)

你应该能够从那里得到其余的=)