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

时间:2010-11-10 06:37:12

标签: 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  =  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;

 }

这基本上是从member_ID表中存在$nombre的成员表中获取成员行中列的所有值。

在成员表中,有两列名为“state”和“district”。我想这样做,以便php可以告诉我这个查询的州和区列中有多少不同的值。

那么,我怎样才能编写一个查询或使用php来告诉多少同伴来自给定状态。我不想为50个状态中的每个状态查询一次db,因为这会花费太多时间来加载页面。那么,有没有一种有效的方法呢?

由于

3 个答案:

答案 0 :(得分:1)

您可以使用两个查询,例如:

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

SELECT DISTINCT members.district
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);

查询方法本身会更快(假设statedistrict列上的索引),但如果你已经执行了这个循环,后一种方法会更快。

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

$all_districts[$msg['district']] = 1;

类似

$all_districts[$msg['state'] . '--' . $msg['district']] = 1;

这也将包括数组键中的状态,稍后count()调用将返回所有唯一的区域状态组合。

答案 1 :(得分:1)

  

...告诉我们有多少同伴   来自某个州?

对于州:

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'

此查询返回状态和区域的不同值以及来自它们的对等计数

答案 2 :(得分:0)

您可以将地区保存在其他数组中,例如

$district[] =  $msg['district'];
在使用函数array_count_values

的循环print_r之后

print_r(array_count_values($district));