|
Количество записей всего и IS NOT NULL одним запросом (реально?)
|
|||
---|---|---|---|
#18+
Есть таблица с полем username - по умолчанию NULL. Можно ли одним запросом выбрать количество всех записей и количество IS NOT NULL записей этого поля? Очень надо в один запрос... без доп. таблиц... sql_ver==3.23. Помогите пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 16:50 |
|
Количество записей всего и IS NOT NULL одним запросом (реально?)
|
|||
---|---|---|---|
#18+
select count(*) as full, count(username) as is_not_null from table1; ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 17:17 |
|
Количество записей всего и IS NOT NULL одним запросом (реально?)
|
|||
---|---|---|---|
#18+
извиняюсь... ошибся - не количество IS NOT NULL, а записи IS NOT NULL. Т.е. количество всех записей и username'ы, которые не NULL. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 17:40 |
|
Количество записей всего и IS NOT NULL одним запросом (реально?)
|
|||
---|---|---|---|
#18+
получилось вот так... 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 во втором столбце - количество ВСЕГО СТРОК (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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 18:38 |
|
Количество записей всего и IS NOT NULL одним запросом (реально?)
|
|||
---|---|---|---|
#18+
Объясните пожалуйста как это работает? Зачем таблице второй алиас? Будет ли меньшим извратом сделать выборку количества всех записей таблицы и также при этом выбрать конкретного пользователя по 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.
Так лучше или тоже изврат? Просто тратить на подсчет количества записей online-таблицы 1 запрос, мне кажется, накладно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2003, 06:17 |
|
Количество записей всего и IS NOT NULL одним запросом (реально?)
|
|||
---|---|---|---|
#18+
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 так задача решена? лучше описать ее словесно, тогда вероятно решение будет найдено быстрее ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2003, 08:32 |
|
Количество записей всего и IS NOT NULL одним запросом (реально?)
|
|||
---|---|---|---|
#18+
Решена.. но.. Рационально ли это? Дело в том, что необходимо взять из тиаблицы online данные следующего рода: количество записей в таблице всего (фактически - количество пользователей просматривающих сайт), и записи, где поля username IS NOT NULL. Первый же ответ решил эту задачу, но как и предполагалось, не очень красивое решение получилось. Поэтому я решил выбрать количество всех записей в таблице в отдельном (предыдущем!) запросе, который все равно идет обязательно и убрать его нельзя. Тот запрос выбирал по ip-адресу запись текущего пользователя (соотвественно ip-адресу). Вот я и переписал ваше решение под этот запрос. Оно тоже работает, но мне интерестна сама реализация такого подхода. Как такой запрос работает и почему - как я и говорил, я составил запрос по аналогии с вашим первым ответом. Как такая реализация отразится на скорости запроса и прочих накладных расходах - есть ли какие-нибудь надостатки? Повторю, что в данной таблице хранятся записи пользователей, которые в данный момент просматривают сайт (из них обособлены авторизированные пользователи - username==IS NOT NULL). Соотвественно записи постоянно удаляются (по timeout'у) и добавляются. Путем переноса подсчета количетсва всех записей в таблице online в другой запрос, я выторговал для себя простой запрос на получение списка авторизированных пользователей, т.е. SELECT username FROM online WHERE username IS NOT NULL; ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2003, 09:50 |
|
|
start [/forum/topic.php?fid=47&msg=32268340&tid=1855772]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 307ms |
total: | 460ms |
0 / 0 |