簡體   English   中英

從mysql_num_rows結果獲取計數

[英]Get count from mysql_num_rows result

我有一個收集聚會的RSVP的表格。 填寫表格(姓名)的人可以帶客人(客人)。 在通知電子郵件中,我試圖提供准確的RSVP數量以及姓名和訪客總數。

如果我只是獲得姓名計數(對於填寫表格的人),這很容易做到:

mysql_query($query);
$result = mysql_query("select * from tablename"); 
$rowCount = mysql_num_rows($result); 
mysql_close($link);

而我只是將$rowCount用作$rowCount的總數。 但我也想將來賓包括在內。 該訪客在表單中輸入為GuestFirstNameGuestLastName ,並與填寫表單的人記錄在同一記錄上。 所以我嘗試了這個。 當我包括一個來賓時,它起作用了-它說總的RSVP為2。但是當我在下一個測試中不包括來賓時,它也算為2。這是我使用的代碼:

mysql_query($query);
$result = mysql_query("select * from tablename"); 
$result_guest = mysql_query("select * from tablename WHERE 
GuestFirstName IS NOT NULL); 
$rowCount = mysql_num_rows($result) + mysql_num_rows($result_guest) ; 
mysql_close($link);    

就像我說的那樣,即使沒有輸入來賓,此代碼也會產生2個RSVP。 任何幫助,將不勝感激。 謝謝。

cdr6800

您可以通過以下單個查詢來實現。 也請嘗試使用PDO或mysqli_ *函數,因為您已棄用了mysql_ *。

SELECT 
    COUNT(*) AS total_names,
    COUNT(CASE WHEN GuestFirstName IS NOT NULL THEN 1 END) AS total_guests
FROM tablename;

因此,如果有10條邀請行,而其中只有4條邀請人,結果將是:

total_names    total_guests
10             4

這是一種獲取行數的昂貴方法:從表中的所有行中選擇所有列,然后從數據庫中將這些列提取到客戶端,以僅獲取行數的“計數”。

SQL提供聚合函數。 例如, COUNT()可用於返回行數。


至於為什么要返回兩行...

  WHERE GuestFirstName IS NOT NULL

最可能的解釋是,表中有兩行具有分配給GuestFirstName列的非NULL值。 它可能是空的(零長度字符串),不認為是NULL。 考慮

  SELECT '' IS NULL       -- 0 (false)
       , '' IS NOT NULL   -- 1 (true)     

我認為您可能還想從GuestFirstName等於空字符串的計數行中排除。


不建議使用 PHP mysql_擴展名,並將在以后的版本中將其刪除。 有兩個合適的替代品: PDOmysqli


並使用返回單行和行數的查詢。 這將比返回整個表更有效,只是為了計數。

並一次通過數據。 對於包含來賓的行,將計數增加2,否則將計數增加1。使用SUM()聚合,其表達式返回2或1。

例如:

SELECT SUM(IF(t.GuestFirstName<>'',2,1)) AS total_including_guests
     , SUM(1) AS count_rsvp
  FROM mytable t

來賓名稱可能為空(但不為null)。 嘗試:

$result_guest = mysql_query( select * from tablename 
    WHERE GuestFirstName IS NOT NULL 
    AND GuestFirstName != '');

實際上,您可以使用SUM()進行一個查詢而無需附加邏輯來執行此操作

SELECT SUM(IF(GuestFirstName IS NULL, 1, 2)) AS totalGuests FROM tablename;

這將遍歷所有行,並總計1(如果該行中有1位客人來了)或2(如果“主要”客人+他的邀請來了)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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