簡體   English   中英

使用單個公共列計算SQL表中唯一行的數量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM