|
|
|
| Всем привет. =)
Делаю список контактов.
Надо подсчитать сколько всего в контакте и сколько из них в онлайн.
есть 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` тоже как-то совсем не к месту.
приведите список полей каждой таблицы , и что вы хотите получить в результате выполнения запроса | |
|
|
|
|
|
|
|
для: 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` это с кем ,
или здесь другая логика ? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: а-я
(11.01.2009 в 18:37)
| | подсказка:
SELECT SUM(a.`sid` IS NOT NULL) AS `onl`, COUNT(b.uid_2) AS `tot` ....
Безо всяких группировок. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: xx7
(11.01.2009 в 19:33)
| | спасибо!) Ваш вариант тож работает на "ура!" =) | |
|
|
|