powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Количество записей всего и IS NOT NULL одним запросом (реально?)
7 сообщений из 7, страница 1 из 1
Количество записей всего и IS NOT NULL одним запросом (реально?)
    #32268132
#define
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица с полем username - по умолчанию NULL. Можно ли одним запросом выбрать количество всех записей и количество IS NOT NULL записей этого поля? Очень надо в один запрос... без доп. таблиц... sql_ver==3.23. Помогите пожалуйста.
...
Рейтинг: 0 / 0
Количество записей всего и IS NOT NULL одним запросом (реально?)
    #32268195
-Timka-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select count(*) as full, count(username) as is_not_null from table1;
...
Рейтинг: 0 / 0
Количество записей всего и IS NOT NULL одним запросом (реально?)
    #32268236
#define
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извиняюсь... ошибся - не количество IS NOT NULL, а записи IS NOT NULL. Т.е. количество всех записей и username'ы, которые не NULL.
...
Рейтинг: 0 / 0
Количество записей всего и IS NOT NULL одним запросом (реально?)
    #32268340
-Timka-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получилось вот так...

select t1.username as username_not_null, count(*) as total from table1 as t1, table1 as t2 where t1.username is not NULL group by t1.username

результат

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  
 ----------------------------
 
|username_not_null  | total  
 ------------------------------
 
|test           |     7  
|uuuuuuuuuu     |     7  
|yyyyyyyyyyyy   |     7  
 ------------------------------
 



первый столбец - не нуль username
во втором столбце - количество ВСЕГО СТРОК (with NULL-values)

Вообще-то получается декартово произведение, но его ты не видишь.

P.S. по-моему это все извращение.... ))))... надо писать два запроса IMHO...



Среда для опытов :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#
# Структура таблицы `table1`
#

CREATE TABLE `table1` (
  `username` char( 50 ) default NULL
) TYPE=MyISAM;

#
# Дамп данных таблицы `table1`
#

INSERT INTO `table1` VALUES (NULL);
INSERT INTO `table1` VALUES ('test');
INSERT INTO `table1` VALUES (NULL);
INSERT INTO `table1` VALUES (NULL);
INSERT INTO `table1` VALUES (NULL);
INSERT INTO `table1` VALUES ('uuuuuuuuuu');
INSERT INTO `table1` VALUES ('yyyyyyyyyyyy');

...
Рейтинг: 0 / 0
Количество записей всего и IS NOT NULL одним запросом (реально?)
    #32268578
#define
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объясните пожалуйста как это работает? Зачем таблице второй алиас?

Будет ли меньшим извратом сделать выборку количества всех записей таблицы и также при этом выбрать конкретного пользователя по ip-адресу? По аналогии с тем, что Вы дали, получилось так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
mysql> select * from online;
+ ----------+-----+-----------+
 
| username | lng | ipaddr    |
+ ----------+-----+-----------+
 
| test     | en  |  127 . 0 . 0 . 1  |
| NULL     | ru  |  127 . 0 . 0 . 2  |
| admin    | de  |  127 . 0 . 0 . 3  |
+ ----------+-----+-----------+
 

mysql> SELECT t1.lng,t1.ipaddr,count(t1.lng) FROM online as t1, online as t2
WHERE t1.ipaddr='127.0.0.1' GROUP BY ipaddr;
+ -----+-----------+---------------+
 
| lng | ipaddr    | count(t1.lng) |
+ -----+-----------+---------------+
 
| ru  |  127 . 0 . 0 . 1  |              3  |
+ -----+-----------+---------------+
 
 1  row in set ( 0 . 00  sec)


Так лучше или тоже изврат? Просто тратить на подсчет количества записей online-таблицы 1 запрос, мне кажется, накладно.
...
Рейтинг: 0 / 0
Количество записей всего и IS NOT NULL одним запросом (реально?)
    #32268616
-Timka-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mysql> SELECT t1.lng,t1.ipaddr,count(t1.lng) FROM online as t1, online as t2
WHERE t1.ipaddr='127.0.0.1' GROUP BY ipaddr;

вместо ipaddr я преполагал username;
WHERE t1.ipaddr='127.0.0.1' заменить на
where t1.username is not NULL

так задача решена?
лучше описать ее словесно, тогда вероятно решение будет найдено быстрее
...
Рейтинг: 0 / 0
Количество записей всего и IS NOT NULL одним запросом (реально?)
    #32268697
#define
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решена.. но..
Рационально ли это? Дело в том, что необходимо взять из тиаблицы online данные следующего рода: количество записей в таблице всего (фактически - количество пользователей просматривающих сайт), и записи, где поля username IS NOT NULL. Первый же ответ решил эту задачу, но как и предполагалось, не очень красивое решение получилось. Поэтому я решил выбрать количество всех записей в таблице в отдельном (предыдущем!) запросе, который все равно идет обязательно и убрать его нельзя. Тот запрос выбирал по ip-адресу запись текущего пользователя (соотвественно ip-адресу). Вот я и переписал ваше решение под этот запрос. Оно тоже работает, но мне интерестна сама реализация такого подхода. Как такой запрос работает и почему - как я и говорил, я составил запрос по аналогии с вашим первым ответом.
Как такая реализация отразится на скорости запроса и прочих накладных расходах - есть ли какие-нибудь надостатки? Повторю, что в данной таблице хранятся записи пользователей, которые в данный момент просматривают сайт (из них обособлены авторизированные пользователи - username==IS NOT NULL). Соотвественно записи постоянно удаляются (по timeout'у) и добавляются.
Путем переноса подсчета количетсва всех записей в таблице online в другой запрос, я выторговал для себя простой запрос на получение списка авторизированных пользователей, т.е. SELECT username FROM online WHERE username IS NOT NULL;
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Количество записей всего и IS NOT NULL одним запросом (реально?)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]