我有个问题,希望你能帮我个忙。
为了分解它,我在数据库中有一个表,我在数据库中创建事件,它被称为"dansetimer“,为此,我有一个名为"transak”的表,用于事件的参与者。
我想数数一段时间内有多少个活动,有20多个参与者。
我已经做了一个开始,它也很好,但我不知道如何计数,多少事件,我结束了,当然,我可以只是手动计数,但我真的想让PHP计数它。
$hentgg = mysql_query("SELECT * FROM dansetimer WHERE dato BETWEEN $fra AND $til");
if(mysql_num_rows($hentgg)) {
while($visgg = mysql_fetch_array($hentgg)) {
$result=mysql_query("SELECT count(*) as total FROM transak WHERE produkt = '$visgg[id]'");
$data=mysql_fetch_assoc($result);
if($data['total'] > 20) {
echo $visgg[title];
}
}
} else {
echo "Ingen resultater";
}
使用上面的代码,我能够检索事件并列出它们。
使用此代码:
$result=mysql_query("SELECT count(*) as total FROM transak WHERE produkt = '$visgg[id]'");
$data=mysql_fetch_assoc($result);
我可以数出有多少人参加了这次活动,并且用if语句来测试是否有20人以上,我可以隐藏那些没有更多参与者的事件。
但你对我如何写“在给定的时间内,你举办了23场有20多人参加的活动”或诸如此类的东西有一个好主意吗?
发布于 2016-11-19 03:50:48
您可以在循环中保留一个额外的计数器,这样您就可以看到有多少个事件有超过20个参与者:
// At the start of your script
$large_events = 0;
...
// In your loop:
if($data['total'] > 20) {
echo $visgg[title];
$large_events++;
}
但是我认为让SQL给您提供更多的细节更容易,而且可能也更快。在您的解决方案中,它将查询每个事件的参与者,因此,如果某人有1000个事件,每个事件都有20个或更少的参与者,那么您的数据库必须执行1001次查询,最终结果是'Ingen resultater‘。
因此,将查询更改为:
SELECT *
FROM
( SELECT
dt.*,
(SELECT count(*) FROM transak WHERE produkt = dt.id) AS total_participants
FROM dansetimer dt
WHERE dato BETWEEN $fra AND $til
)
WHERE
total_participants > 20
ORDER BY
dato,
title
此查询只返回20名以上参与者的事件,并将返回每个事件的参与者数。因此,您只需将此查询结果提取到一个简单的数组中,并显示每个项,以显示标题、参与者数量和其他信息。数组的长度是“大型”事件的数量。
PS:你知道mysql_*
函数是旧的,在PHP7中被删除了吗?我想是时候升级到PDO了。
发布于 2016-11-19 04:18:21
需要使用下面的查询,您就会得到想要的输出(我想在给定的时间内统计出有超过20个参与者的事件数量)。
SELECT count(*) FROM dansetimer dt WHERE (SELECT count(*) FROM transak WHERE produkt = dt.id)>=20 and dato BETWEEN $fra AND $til
https://stackoverflow.com/questions/40692440
复制相似问题