我有一个问题希望你能帮我解决。
为了分解它,我在数据库中有一个表,我在其中创建事件,它被称为“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 人”或类似内容有什么好主意吗?
最佳答案
您可以在循环中保留一个额外的计数器,以便您可以查看有多少事件有超过 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_*
函数很旧并且在 PHP 7 中被删除吗?我认为是时候升级到 PDO 了。
关于php - 仅显示参与者超过 20 人的线路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40692440/