Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: count() по онлайн и сколько всего?
 
 автор: а-я   (11.01.2009 в 08:37)   письмо автору
 
 

Всем привет. =)
Делаю список контактов.
Надо подсчитать сколько всего в контакте и сколько из них в онлайн.
есть 2 таблицы users и contacts
в таблице `users` есть поле `sid`,
которое отвечает за статус онлайн. если `sid` IS NOT NULL - то юзер на сайте.

Были попытки, но что-то не получается:

SELECT 
 (a.`sid` IS NOT NULL) as `online`, 
 count(`online`) as `all`
FROM `users` a, `contacts` b 
WHERE b.`uid_1`=$id AND a.`id`=b.`uid_2`
GROUP BY `online`

т.е. я в выборке пытаюсь сделать условие, что sid =NULL/
получая при это 1 или 0.
а потом пытаюсь подсчитать сколько всего 1 и 0.
группируя их GROUP BY `online`
результат что-то не радует, то ошибка, что такого поля нет, то левые данные.

Т.е. вся проблема в том, что поле `sid` может принимать разные значния.
если бы только 0 и 1, тогда было бы проще.

  Ответить  
 
 автор: xx7   (11.01.2009 в 17:13)
 
   для: а-я   (11.01.2009 в 08:37)
 

чё-то много раз online в запросе

>as `online`,
>count(`online`)
может имелось ввиду count(a.`online`) или count(b.`online`) ?
GROUP BY `online` тоже как-то совсем не к месту.

приведите список полей каждой таблицы , и что вы хотите получить в результате выполнения запроса

  Ответить  
 
 автор: а-я   (11.01.2009 в 17:22)   письмо автору
 
   для: xx7   (11.01.2009 в 17:13)
 

дело в том, что поля online нету. мы получаем его (a.`sid` IS NOT NULL) as `online`
т.е. из условия... но я так понял нельзя его дальше использовать...

  Ответить  
 
 автор: xx7   (11.01.2009 в 17:55)
 
   для: а-я   (11.01.2009 в 17:22)
 

теперь совсем ничего не понятно

допустим в таблице A (users) просто перечислены абсолютно все юзеры , и отмечены их статусы (a.`sid`)
что тогда в таблице B ? что есть контакты ? и почему b.`uid_1`=$id AND a.`id`=b.`uid_2` ?

например это показывается юзеру у которого его личный идентификатор $id,
тогда каждый контакт это отдельная запись в таблице B ? где например
b.`uid_1` это кто , а `uid_2` это с кем ,
или здесь другая логика ?

  Ответить  
 
 автор: а-я   (11.01.2009 в 18:37)   письмо автору
 
   для: xx7   (11.01.2009 в 17:55)
 

b.`uid_1`=$id AND a.`id`=b.`uid_2`

b.`uid_1` - кто добавил
b.`uid_2` - кого добавили.

допустим, у меня id=1
b.`uid_1`=1 AND a.`id`=b.`uid_2`
мне надо найти в таблице b мои записи,
что нам даст.
`uid_1` | `uid_2`
1 5
1 8
1 21
1 68

теперь берем `uid_2`, это кого добавили,
ищем его в основной таблице a,
в этой таблице a есть поле sid.

Вот мне надо узнать, сколько всего a.`sid` IS NULL и сколько a.`sid` IS NOT NULL

  Ответить  
 
 автор: Trianon   (11.01.2009 в 19:23)   письмо автору
 
   для: а-я   (11.01.2009 в 18:37)
 

подсказка:
SELECT SUM(a.`sid` IS NOT NULL) AS `onl`, COUNT(b.uid_2) AS `tot` ....

Безо всяких группировок.

  Ответить  
 
 автор: а-я   (11.01.2009 в 19:29)   письмо автору
 
   для: Trianon   (11.01.2009 в 19:23)
 

=) вот спасибо!) эт то что нужно!)

  Ответить  
 
 автор: xx7   (11.01.2009 в 19:33)
 
   для: Trianon   (11.01.2009 в 19:23)
 

Собственно и без SUM можно без всяких группировок ,) если там точно NULL у sid в офлайне

SELECT COUNT( b.id_1 ) , COUNT(a.sid)
FROM
`contacts` b LEFT JOIN `users` a ON a.id = b.id_2
WHERE b.id_1 = 1

  Ответить  
 
 автор: а-я   (12.01.2009 в 01:20)   письмо автору
 
   для: xx7   (11.01.2009 в 19:33)
 

спасибо!) Ваш вариант тож работает на "ура!" =)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования