使用单个公共列计算SQL表中唯一行的数量

时间:2017-03-21 14:21:07

标签: php mysql

我有一个SQL数据库中的事件网站的下表:

usereventsid    event_id    user_id    reg_date    rating    comments    attend

81              92          1          NULL        NULL      NULL        1
82              90          1          NULL        NULL      NULL        1
83              91          1          NULL        NULL      NULL        1
84              88          1          2017-03-21  NULL      comment1    NULL
85              88          4          NULL        NULL      NULL        1
86              92          4          NULL        NULL      NULL        1

此表显示不同事件的ID号。如果用户的ID号出现在表中并且参加设置为1,则他们正在参加该事件。如果用户的身份证号码出现在表格中但是出席时为空,则他们不会参加并仅对该事件发表评论。

我希望能够计算参加每个独特活动的用户数量。因此,在这种情况下,有两个用户参加事件92和88,有一个用户参加事件90和91.这是我需要从表中获得的信息,但我正在努力弄清楚如何做到这一点。

目前这是我的sql:

$eventsSql = "SELECT eventid, name, date, time, location, description
              FROM Events
              ORDER BY eventid";

$result = mysqli_query($conn, $eventsSql)
        or die(mysqli_error($conn));

while($event = mysqli_fetch_assoc($result))
            {
                  $id = $event['eventid'];
                  $name = $event['name'];
                  $date = $event['date'];
                  $time = $event['time'];
                  $location = $event['location'];
                  $des = $event['description'];


              $sql = "SELECT event_id, attend
                      FROM User_Events
                      WHERE event_id = '$id' AND attend = '1'";

              $attendanceResult = mysqli_query($conn, $eventsSql)
                           or die(mysqli_error($conn));

              $num = mysqli_num_rows($attendanceResult);

               echo "<!--echos html into the webpage-->";

在我的脑海中,第二个sql语句的工作方式如下(我知道这不正确,因为它没有产生正确的结果);该语句选择使用上面生成的$ id变量指定了事件id的所有行,并且参数设置为1.然后计算这些行的数量,并将值放在$ num中。实际发生的是声明是选择表中的每一行而$ num被设置为6.我不明白为什么会发生这种情况,因为$ id应该只匹配值90和91和两行,值为88和92.

有人可以帮我解决这个问题,谢谢。

3 个答案:

答案 0 :(得分:2)

似乎您需要参加活动的不同用户数

UNLOGGED batch

答案 1 :(得分:0)

您可以使用GROUP BY子句和子查询

通过一个SQL语句执行此操作
SELECT SUM(user_count) FROM 
   (SELECT COUNT(user_id) AS user_count 
    FROM User_Events
    WHERE attend=1
    GROUP BY event_id ) AS event_count 

应该根据参加所有活动的用户数量给出一个结果。

答案 2 :(得分:0)

大声笑,我原来的sql语句有效我只是在$attendanceResult = mysqli_query($conn, $eventsSql)

中使用了错误的变量 无论如何,谢谢你们。