Вы не зашли.
Главная »
SQL » Подсчитать количество возвращенных полей
#1.
Morgan
Off
(10)
Участник
2010.03.10 18:06
Запрос : SELECT `user`,COUNT(*) FROM `posts` GROUP BY `user`;
получаем ТОЛЬКО пользователя и количество его постов.
Как можно подсчитать, количество сгруппированных значении?
Кроме как mysql_num_rows() ничего нем придумал
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#2.
Morgan
Off
(10)
Участник
2010.03.10 19:07
Подсказали функцию SQL_CALC_FOUND_ROWS .
Можно ее использовать как то в одном запросе?
Натан ротшильд :
Кто владеет информацией, тот владеет миром
Нужно подсчитать количество уникальных users?
В конкретно тобой приведенном SQL, COUNT и так будет работать корректно. А вот если добавшь LIMIT, тогда да, вполне себе SQL_CALC_FOUND_ROWS
#4.
Morgan
Off
(10)
Участник
2010.03.10 20:08
Gemorroj написал:
Нужно подсчитать количество уникальных users?
В конкретно тобой приведенном SQL, COUNT и так будет работать корректно. А вот если добавшь LIMIT, тогда да, вполне себе SQL_CALC_FOUND_ROWS
коунт Возвратит количество сообщений для каждого пользователя, но никак не количество самих юзеров
Натан ротшильд :
Кто владеет информацией, тот владеет миром
Morgan написал:
получаем ТОЛЬКО пользователя и количество его постов.
имелось ввиду, что тут COUNT будет вполне корректно работать.
Morgan написал:
Как можно подсчитать, количество сгруппированных значении?
чем не устраивает mysql_num_rows?
просто непонятно, зачем делать GROUP BY, если тебе нужно подсчитать количество пользователей?
Код:
SELECT COUNT(DISTINCT user) FROM posts |
не ?
#6.
Morgan
Off
(10)
Участник
2010.03.11 04:04
Хм, сегодня попробую
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#7.
2010
Off
(1)
Участник
2010.03.11 10:10
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 11:11
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 11:11)
Натан ротшильд :
Кто владеет информацией, тот владеет миром
#9.
2010
Off
(1)
Участник
2010.03.11 11:11
Кто тебе сказал что без count? я написал: имено то, подсчитать. Будто ты сам не понял чем.
#10.
2010
Off
(1)
Участник
2010.03.11 12:12
Морган, ну просто берёшь отправляешь сообщение. При отправке работает инсерт запрос. Ты записываешь логин юзера в определённый столб в определённый ник когда он его примит или отправит. На второй раз если этот логин существует - записи не будет т.е. специально код пишешь. Далее выводишь список тех с кем имел контакт. Может не понятно объяснил но тебе надо приписать чужой ник отправителя или кому отправил что бы этот ник записался на твоё имя и потом вывел. или ты Код не знаешь?
Код:
SELECT COUNT(DISTINCT IF(user1 <> 1, user1, user2)) |
FROM posts |
WHERE user1 = 1 OR user2 = 1 |
Вместо 1 ID пользователя, для которого считаем данные.