Как получить количество строк в базе данных mySql - PullRequest
1 голос
/ 06 сентября 2011
+-------------------+---------------------+------+-----+---------+----------------+
| 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.

Как я могу получить количество сообщений, где MSGID = 1 и количество пользователей, которые получили сообщение, где MSGID = 1, и количество пользователей, которые не получили сообщение, где MSGID = 1?

Я хочу сделать это в цикле, чтобы получить три значения типа [5,4,1]. Поэтому при каждой загрузке страницы запрос будет проверять базу данных и обновлять наборы. Просьба помочь

Ответы [ 3 ]

2 голосов
/ 06 сентября 2011

Сначала получить счетчик для количества сообщений, где 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 голосов
/ 06 сентября 2011

Чтобы получить его с помощью одного запроса, вы можете выполнить объединение, как показано ниже:

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'

Надеюсь, это сработает для вас.

0 голосов
/ 06 сентября 2011

Вы можете сделать это одним запросом. Я не вижу выгоды от цикла?

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, с полученным да / нет.

...