2011-09-05 46 views
1
+-------------------+---------------------+------+-----+---------+----------------+ 
| RowId    | MSGID| Received| UID | Default |    | 
+-------------------+---------------------+------+-----+---------+----------------+ 
| 1     | 1 | NO  | 1 | NULL |    | 
| 2     | 1 | YES  | 3 | NULL |    | 
| 3     | 1 | YES  | 4 | NULL |    | 
| 4     | 1 | YES  | 5 | NULL |    | 
| 5     | 5 | YES  | 2 | NULL |    | 
| 6     | 2 | YES  | 8 | NULL |    | 
| 7     | 1 | YES  | 9 | NULL |    | 
+-------------------+---------------------+------+-----+---------+----------------+ 

這是我在MySQL中的表格。如何在mySql數據庫中獲得行數

如何獲得消息數MSGID = 1和已收到消息的用戶數量MSGID = 1和沒有收到消息的用戶數的統計MSGID = 1

我想在循環中這樣做,以便我可以獲得三個值,如[5,4,1]。所以每次頁面加載時查詢都會檢查數據庫並更新集合。請幫助

+0

'SELECT COUNT(*)FROM myTable WHERE MSGID = 1' – mKorbel

回答

2

首先得到一個計數消息的數量,其中MSGID = 1

SELECT COUNT(RowID) FROM tableName WHERE MSGID = 1 

爲了讓誰收到了味精,其中MSGID = 1

SELECT COUNT(DISTINCT UID) FROM tableName WHERE MSGID = 1 
用戶數的計數

要得到誰沒有收到味精,其中MSGID = 1

SELECT COUNT(DISTINCT UID) FROM tableName WHERE MSGID =1 AND Received = 'NO' 
+0

是否可以在循環和單個查詢中執行 – Mano

+0

我不知道爲什麼你需要循環,但我相信你可以把所有這一切通過使用變量並具有類似的東西到一個查詢中:SELECT COUNT(t1.RowID),COUNT(DISTINCT t2.UID),COUNT(DISTINCT t3.UID)FROM表t1,表t2,表t3 WHERE t1.MSGID = 1 AND t2.MSGID = 1 AND t3.MSGID = 1 AND t3.Received ='NO'。 *****請不要,我沒有測試過這個,但相信它應該工作***** – user387049

0

你可以做用戶數的計數這在一個查詢中。我沒有看到循環的好處?

select count(*) 
    , count(distinct uid) 
    , count(distinct case when received = 'NO' then uid else null end case) 
    from table_name 
where msgid = 1 

這確實應該多個表,

1)的用戶,在UID

2)消息不同,上MSGID不同,與所接收的是/否。

0

要獲得使用一個查詢,你可以做一個工會都喜歡它後面:

SELECT COUNT(RowID) AS 'Col1', '' AS 'Col2', '' AS 'Col3' 
FROM tableName WHERE MSGID = 1 

UNION ALL 

SELECT '' AS 'Col1', COUNT(DISTINCT UID) AS 'Col2', '' AS 'Col3' 
FROM tableName WHERE MSGID = 1 

UNION ALL 

SELECT '' AS 'Col1', '' AS 'Col2' , COUNT(DISTINCT UID) AS 'Col3' 
FROM tableName WHERE MSGID =1 AND Received = 'NO' 

希望這個作品送給你。