Вы не зашли.
Главная » SQL » Подсчитать количество возвращенных полей
#1. Morgan Off (10)
Участник
2010.03.10 21:09
Запрос : SELECT `user`,COUNT(*) FROM `posts` GROUP BY `user`;
получаем ТОЛЬКО пользователя и количество его постов.
Как можно подсчитать, количество сгруппированных значении?
Кроме как mysql_num_rows() ничего нем придумал
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#2. Morgan Off (10)
Участник
2010.03.10 22:10
Подсказали функцию SQL_CALC_FOUND_ROWS .
Можно ее использовать как то в одном запросе?
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#3. Gemorroj Off (107)
Administrator
2010.03.10 22:10
Нужно подсчитать количество уникальных users?
В конкретно тобой приведенном SQL, COUNT и так будет работать корректно. А вот если добавшь LIMIT, тогда да, вполне себе SQL_CALC_FOUND_ROWS
#4. Morgan Off (10)
Участник
2010.03.10 23:11
Gemorroj написал:
Нужно подсчитать количество уникальных users?
В конкретно тобой приведенном SQL, COUNT и так будет работать корректно. А вот если добавшь LIMIT, тогда да, вполне себе SQL_CALC_FOUND_ROWS
коунт Возвратит количество сообщений для каждого пользователя, но никак не количество самих юзеров
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#5. Gemorroj Off (107)
Administrator
2010.03.11 05:05
Morgan написал:
получаем ТОЛЬКО пользователя и количество его постов.
имелось ввиду, что тут COUNT будет вполне корректно работать.
Morgan написал:
Как можно подсчитать, количество сгруппированных значении?
чем не устраивает mysql_num_rows?
просто непонятно, зачем делать GROUP BY, если тебе нужно подсчитать количество пользователей?
Код:
SELECT COUNT(DISTINCT user) FROM posts
не ?
#6. Morgan Off (10)
Участник
2010.03.11 07:07
Хм, сегодня попробую
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#7. 2010 Off (1)
Участник
2010.03.11 13:01
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  - НЕ ЗАБУДЬ в конце.
#8. Morgan Off (10)
Участник
2010.03.11 14:02
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?
Отредактировано Morgan (2010.03.11 14:02)
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#9. 2010 Off (1)
Участник
2010.03.11 14:02
Кто тебе сказал что без count? я написал: имено то, подсчитать. Будто ты сам не понял чем.
#10. 2010 Off (1)
Участник
2010.03.11 15:03
Морган, ну просто берёшь отправляешь сообщение. При отправке работает инсерт запрос. Ты записываешь логин юзера в определённый столб в определённый ник когда он его примит или отправит. На второй раз если этот логин существует - записи не будет т.е. специально код пишешь. Далее выводишь список тех с кем имел контакт. Может не понятно объяснил но тебе надо приписать чужой ник отправителя или кому отправил что бы этот ник записался на твоё имя и потом вывел. или ты Код не знаешь?
#11. Gemorroj Off (107)
Administrator
2010.03.11 17:05
Код:
SELECT COUNT(DISTINCT IF(user1 <> 1, user1, user2))
FROM posts
WHERE user1 = 1 OR user2 = 1
Вместо 1 ID пользователя, для которого считаем данные.
Страниц: 1 2 Все
Главная
WEB
PunBB Mod v0.6.2
0.014 s