![](/img/trans.png)
[英]if (mysql_num_rows(($result1) && $result) == 0) {
[英]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
的總數。 但我也想將來賓包括在內。 該訪客在表單中輸入為GuestFirstName
和GuestLastName
,並與填寫表單的人記錄在同一記錄上。 所以我嘗試了這個。 當我包括一個來賓時,它起作用了-它說總的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_
擴展名,並將在以后的版本中將其刪除。 有兩個合適的替代品: PDO和mysqli 。
並使用返回單行和行數的查詢。 這將比返回整個表更有效,只是為了計數。
並一次通過數據。 對於包含來賓的行,將計數增加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.