Morgan » 2010.03.10 21:37

Запрос : SELECT `user`,COUNT(*) FROM `posts` GROUP BY `user`;
получаем ТОЛЬКО пользователя и количество его постов.
Как можно подсчитать, количество сгруппированных значении?
Кроме как mysql_num_rows() ничего нем придумал

Morgan » 2010.03.10 22:27

Подсказали функцию SQL_CALC_FOUND_ROWS .
Можно ее использовать как то в одном запросе?

Gemorroj » 2010.03.10 22:43

Нужно подсчитать количество уникальных users?
В конкретно тобой приведенном SQL, COUNT и так будет работать корректно. А вот если добавшь LIMIT, тогда да, вполне себе SQL_CALC_FOUND_ROWS

Morgan » 2010.03.10 23:18

Gemorroj написал:

Нужно подсчитать количество уникальных users?
В конкретно тобой приведенном SQL, COUNT и так будет работать корректно. А вот если добавшь LIMIT, тогда да, вполне себе SQL_CALC_FOUND_ROWS

коунт Возвратит количество сообщений для каждого пользователя, но никак не количество самих юзеров

Gemorroj » 2010.03.11 05:45

Morgan написал:

получаем ТОЛЬКО пользователя и количество его постов.

имелось ввиду, что тут COUNT будет вполне корректно работать.

Morgan написал:

Как можно подсчитать, количество сгруппированных значении?

чем не устраивает mysql_num_rows?
просто непонятно, зачем делать GROUP BY, если тебе нужно подсчитать количество пользователей?

Код:

1
SELECT COUNT(DISTINCT user) FROM posts

не ?

Morgan » 2010.03.11 07:55

Хм, сегодня попробую

2010 » 2010.03.11 13:58

Morgan, смотри вот например я писал форум.
У меня был раздел и подраздел. Мне нужно было узнать список подразделов id #1 т.е. первого номера. Я сделал так:
создаю раздел.

@mysql_query(INSERT INTO `forum` (type, name) VALUES("s", "NUMBER ONE");

Создан раздел с именем намбер ван с идом 1.
Теперь создаём подраздел.
Естествено если мы не укажем куда он создаётся - то он появится во всех разделах.

Теперь как уже создали раздел выводим список.

$q = mysql_query('SELECT id, name FROM `forum` WHERE `type`="s"');

while ($s = mysql_fetch_object($q) {
echo '<a href="index.php?s=' . $s->id . '">' . $s->name . '</a><br/>
}
это мы вывели имена разделов и их номер от 1 до доху..

Теперь мы переходим по адресу index.php?s=1 т.к. номер 1.
Там создаём подраздел.

@mysql_query(INSERT INTO `forum` (type, sid, name) VALUES("subs", "1", "NUMBER ONE subs");

мы создали.
Теперь достаём.

$q = mysql_query('SELECT id, name, sid FROM `forum` WHERE `type`="subs" AND `sid`="' . $s . '"');

while ($subs = mysql_fetch_object($q) {
echo '<a href="index.php?s=' . $subs->id . '">' . $subs->name . '</a><br/>
}

как видишь тип ссылки - subs что означает подраздел. И выражение sid - куда мы передали переменную s с джет запроса index.php?s=1 - мы получили имена подразделов раздела номер 1.
выше вторым, был написан инсерт запрос где мы присвоили имя NUMBER ONE subs разделу номер 1. И вот я о том и говорю, точно также можно вывести количество сообщений юзера и подсчитать их например select count(*) from users where login=$lgn and sid=1 то есть к какому sid`у относятся сообщения юзера. Короче типа представь что я написал: раздел - это логин юзера, а подраздел - это его кол-во сообщений или данных. Считай количество имено тут: $q = mysql_query('SELECT id, name, sid FROM `forum` WHERE `type`="subs" AND `sid`="' . $s . '" ORDER BY id DESC');.


ORDER BY id DESC  - НЕ ЗАБУДЬ в конце.

Morgan » 2010.03.11 14:13

Gemorroj, работает.
Теперь вопрос другой.
Есть таблица, личные сообщения. При отправке записывается айди текущего ю3ера и кому он шлет сообщение.
Мне нужно подсчитать количество уникальных пользователей, с которыми текущий пользователь имел контакт, слал, либо принимал сообщения.
То  есть, Условие должно быть WHERE user1 = 1 OR user2 = 1;
как это сделать?
Добавлено спустя   3 минуты  40 секунд:

2010 написал:

Morgan, смотри вот например я писал форум.
У меня был раздел и подраздел. Мне нужно было узнать список подразделов id #1 т.е. первого номера. Я сделал так:
создаю раздел.

@mysql_query(INSERT INTO `forum` (type, name) VALUES("s", "NUMBER ONE");

Создан раздел с именем намбер ван с идом 1.
Теперь создаём подраздел.
Естествено если мы не укажем куда он создаётся - то он появится во всех разделах.

Теперь как уже создали раздел выводим список.

$q = mysql_query('SELECT id, name FROM `forum` WHERE `type`="s"');

while ($s = mysql_fetch_object($q) {
echo '<a href="index.php?s=' . $s->id . '">' . $s->name . '</a><br/>
}
это мы вывели имена разделов и их номер от 1 до доху..

Теперь мы переходим по адресу index.php?s=1 т.к. номер 1.
Там создаём подраздел.

@mysql_query(INSERT INTO `forum` (type, sid, name) VALUES("subs", "1", "NUMBER ONE subs");

мы создали.
Теперь достаём.

$q = mysql_query('SELECT id, name, sid FROM `forum` WHERE `type`="subs" AND `sid`="' . $s . '"');

while ($subs = mysql_fetch_object($q) {
echo '<a href="index.php?s=' . $subs->id . '">' . $subs->name . '</a><br/>
}

как видишь тип ссылки - subs что означает подраздел. И выражение sid - куда мы передали переменную s с джет запроса index.php?s=1 - мы получили имена подразделов раздела номер 1.
выше вторым, был написан инсерт запрос где мы присвоили имя NUMBER ONE subs разделу номер 1. И вот я о том и говорю, точно также можно вывести количество сообщений юзера и подсчитать их например select count(*) from users where login=$lgn and sid=1 то есть к какому sid`у относятся сообщения юзера. Короче типа представь что я написал: раздел - это логин юзера, а подраздел - это его кол-во сообщений или данных. Считай количество имено тут: $q = mysql_query('SELECT id, name, sid FROM `forum` WHERE `type`="subs" AND `sid`="' . $s . '" ORDER BY id DESC');.


ORDER BY id DESC  - НЕ ЗАБУДЬ в конце.

ты что мне предлагаешь? Подсчитать количество без COUNT?

2010 » 2010.03.11 14:59

Кто тебе сказал что без count? я написал: имено то, подсчитать. Будто ты сам не понял чем.

2010 » 2010.03.11 15:27

Морган, ну просто берёшь отправляешь сообщение. При отправке работает инсерт запрос. Ты записываешь логин юзера в определённый столб в определённый ник когда он его примит или отправит. На второй раз если этот логин существует - записи не будет т.е. специально код пишешь. Далее выводишь список тех с кем имел контакт. Может не понятно объяснил но тебе надо приписать чужой ник отправителя или кому отправил что бы этот ник записался на твоё имя и потом вывел. или ты Код не знаешь?

Gemorroj » 2010.03.11 17:34

Код:

1
2
3
SELECT COUNT(DISTINCT IF(user1 <> 1, user1, user2))
FROM posts
WHERE user1 = 1 OR user2 = 1

Вместо 1 ID пользователя, для которого считаем данные.