我有一个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.
有人可以帮我解决这个问题,谢谢。
答案 0 :(得分:2)
似乎您需要参加活动的不同用户数
UNLOGGED batch
答案 1 :(得分:0)
您可以使用GROUP BY
子句和子查询
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)