php - 仅显示参与者超过 20 人的线路

标签 php mysql

我有一个问题希望你能帮我解决。

为了分解它,我在数据库中有一个表,我在其中创建事件,它被称为“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/

相关文章:

php - 如何将 PHP 中的分钟转换为小时和分钟以及负分钟?

mysql - 如何在多选中按两列对数据分组进行计数

php - 在 WooCommerce 感谢页面中显示优惠券使用次数和限制

php - 要求需要数据库连接的文件的正确方法

php - Yii2 where 条件与 concat

php - 仍然使用 PDO 参数化查询攻击 SQL 注入(inject)

php - 减少mysql中的一整列

php - 如果为NULL,如何将值插入表中? - MySql

php - 使用 CodeIgniter 在子文件夹中路由 Controller

mysql - CASE 检查 IN 子句中的 NULL 值