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'