仅显示超过20个参与者的行

时间:2016-11-19 11:38:59

标签: 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个参与者的活动”或类似的东西,你有一个好主意。

2 个答案:

答案 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