[英]Count the number of unique rows in SQL table using a single common column
我在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,則他們正在參加活動。 如果用戶的ID號出現在表中,但出席人數為空,則表示他們沒有參加,僅對活動發表了評論。
我希望能夠計算參加每個唯一事件的用戶數。 因此,在這種情況下,有兩個用戶參加事件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。
有人可以幫我解決這個問題,謝謝。
似乎您需要參加活動的不同用戶數量
SELECT eventid, count(distinct user_id)
from Events
where attend =1
GROUP BY eventid
您可以使用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
應該給您一個單一的結果,表明您參加所有活動的用戶數量。
大聲笑,我原來的SQL語句的工作,我只是在$attendanceResult = mysqli_query($conn, $eventsSql)
使用了錯誤的變量
謝謝大家。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.