我有查询,选择是这样的:
$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,因为这会花费太多时间来加载页面。那么,有没有一种有效的方法呢?
由于
答案 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);
查询方法本身会更快(假设state
和district
列上的索引),但如果你已经执行了这个循环,后一种方法会更快。
编辑:要计算每个州的唯一地区,请替换
$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));