Php 如何从mysql中选择有多少列具有相同的值

Php 如何从mysql中选择有多少列具有相同的值,php,mysql,Php,Mysql,我有这样的查询: $query = "SELECT members.* FROM members JOIN $nombre ON members.member_ID=$nombre.friends"; $result = mysql_query($query) or die(mysql_error()); $number = mysql_num_rows($result); $i = 0; while($msg

我有这样的查询:

        $query   = "SELECT members.*
      FROM members 
      JOIN $nombre
      ON members.member_ID=$nombre.friends";
 $result   = mysql_query($query) or die(mysql_error());
 $number   =  mysql_num_rows($result);
 $i    = 0;

 while($msg  =  mysql_fetch_assoc($result))
 {

  //store data in arrays
  $peer_id[$i]   = $msg['member_ID'];
  $peer_state[$i]   = $msg['home_state'];
  $pro_political_views[$i]        = $msg['political_views'];
  $peer_district[$i]  = $msg['district'];
  $peer_first[$i]   = $msg['first_name'];
  $peer_last[$i]   = $msg['last_name'];
  $peer_issue[$i]   = $msg['first_issue'];
  $peer_second[$i]          = $msg['second_issue'];
  $peer_third[$i]   = $msg['third_issue'];
  $peer_stand[$i]   = $msg['iStand'];
  $peer_mail[$i]   = $msg['email'];
  $peer_pic[$i]   = $msg['photo'];

  ++$i;

 }
这实际上是从members表的members行中的列中获取所有值,其中
$nombre
表中存在
成员ID

在members表中,有两列名为“
state
”和“
district
”。我想让php能够告诉我在这个查询的state和district列中有多少不同的值

那么,我该如何编写查询或使用php来告诉给定状态中有多少个对等点呢。我不想为50个州中的每一个州查询数据库一次,因为这会花费太多的时间来加载页面。那么,有没有一种有效的方法来做到这一点


谢谢

您可以在其他数组中保存区域,如

$district[] =  $msg['district'];
在循环
后,使用函数打印


您可以使用两个查询,如下所示:

SELECT DISTINCT members.state
FROM members 
JOIN $nombre
ON members.member_ID=$nombre.friends

这将给你所有独特的州和地区回来,你可以使用或计数或任何东西

或者,将其添加到
while
循环中的某个位置:

$all_states[$msg['state']] = 1;
$all_districts[$msg['district']] = 1;
然后,在循环之后,您可以:

$state_count = count($all_states);
$district_count = count($all_districts);
查询方法本身会更快(假设在
state
district
列上有索引),但如果您已经在执行此循环,则后一种方法会更快

编辑:要统计每个州的唯一地区,请替换

$all_districts[$msg['district']] = 1;
有点像

$all_districts[$msg['state'] . '--' . $msg['district']] = 1;
这也将在数组键中包含状态,稍后的
count()
调用将返回所有唯一的地区状态组合

…告诉我们有多少同龄人 从一个给定的状态

对于各国:

SELECT state, COUNT(m.member_ID) cnt
FROM members m
  JOIN $nombre n ON m.member_ID=n.friends
GROUP BY state
至于各区:

SELECT 'district', COUNT(m.member_ID) cnt
FROM members m
  JOIN $nombre n ON m.member_ID=n.friends
GROUP BY 'district'

此查询返回州和地区的不同值以及来自州和地区的对等点计数

此查询将返回已处理的行数,而不是具有相同地区的行数。为什么?使用数组计数值返回每个值在数组中的数量它将返回您拥有的数量。它不在乎这些值是否相同。太棒了。谢谢但是,如果我想更进一步,找出每个州有多少区是不同的,我会怎么做?例如,纽约的1区和加利福尼亚的1区是不同的。我如何让php认识到只有当地区和州相同时,地区的值才是唯一的?酷。非常感谢。我可以使用SELECT DISTINCT查询来显示它在数据库中存在的所有状态吗?如果一个状态出现在多行中,我只希望它出现一次……是的,这正是SELECT DISTINCT所做的。它只选择不同的结果集。因此,要复制您想要的地区,您需要“选择DISTINCT members.state,members.district FROM…”,这将只选择数据库中存在的每个不同的州-地区对中的一个。
SELECT state, COUNT(m.member_ID) cnt
FROM members m
  JOIN $nombre n ON m.member_ID=n.friends
GROUP BY state
SELECT 'district', COUNT(m.member_ID) cnt
FROM members m
  JOIN $nombre n ON m.member_ID=n.friends
GROUP BY 'district'