我有一个问题,希望你能帮助我。
为了分解它,我在数据库中有一个表,我创建事件,它被称为“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个参与者的活动”或类似的东西,你有一个好主意。
答案 0 :(得分:0)
你可以在循环中保留一个额外的计数器,这样你就可以看到有多少个事件有超过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结果”#39;。
因此,请将查询更改为:
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_*
函数是旧的并且在PHP 7中删除了吗?我认为现在是升级到PDO的时候了。
答案 1 :(得分:0)
需要使用以下查询,您将获得所需的输出(我想计算在给定时间内有多少事件,有超过20个参与者。)。
SELECT count(*) FROM dansetimer dt WHERE (SELECT count(*) FROM transak WHERE produkt = dt.id)>=20 and dato BETWEEN $fra AND $til