powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать пользователей с уникальными IP
19 сообщений из 19, страница 1 из 1
Выбрать пользователей с уникальными IP
    #39617892
Есть таблица history:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
user | ip
aaa   | 1
aaa   | 2
bbb   | 3
bbb   | 1
ccc    | 4
ccc    | 5

Нужно получить количество уникальных пользователей. Уникальным считаются пользователи, у которых не было одинаковых ip. То есть, в данном случае, aaa и bbb не уникальны и должны посчитаться как один, а результат должен быть равен 2.
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617905
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай промежуточную таблицу с юзерами, имеющими неуникальные IP.
Потом исключи этих юзеров из общего списка.
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617909
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если нужно только количество, без списка, то еще легче.
отними от общего числа клиентов количество имеющих пересекающиеся IP.
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617915
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедов МосолУникальным считаются пользователи, у которых не было одинаковых ip.Странные у вас понятия об уникальности.

Код: sql
1.
2.
3.
SELECT COUNT(*) 
FROM 
(SELECT null FROM history GROUP BY user HAVING COUNT(DISTINCT ip)>1) t
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617916
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО это выборка количества клиентов, имеющих более одного ip
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617917
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT COUNT(DISTINCT t1.user)
FROM `table` t1
WHERE NOT EXISTS (   SELECT 1
                     FROM `table t2`
                     WHERE t1.ip=t2.ip
                     AND t1.user != t2.user
                  )


Код: sql
1.
2.
3.
4.
5.
SELECT COUNT(DISTINCT t1.user)
FROM `table` t1
LEFT JOIN `table` t2
     ON t1.ip = t2.ip AND t1.user != t2.user
WHERE t2.user IS NULL
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617919
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс... недочитал вопрос... у меня получается выборка юзеров, которые ни с кем не пересекаются вообще.
Для подсчёта же
Дедов Мосолв данном случае, aaa и bbb не уникальны и должны посчитаться как один
придётся использовать три копии таблицы...
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617921
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё лучше - процедуру со временной таблицей, в которой заменять user на, скажем, MIN(user), пока FOUND_ROWS() ненулевой, и только потом считать COUNT().
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617928
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем такие извращения?
Три элементарных действия.
1. Выделяем те IP, которые встречаются у разных юзеров.
2. Выделяем тех юзеров, у которых есть эти IP
3. Исключаем из общего списка пользователей юзеров из п2
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617933
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4. к получившейся цифре добавить количество IP из п1
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617935
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183 , а как тебе вариант
userip1112222333344445......
Количество "сцепленных" юзеров формально ничем не ограничено...
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617936
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё так:
userip111222233331......
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617949
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заказчик просил в этом случае вывести 1
Согласно техзадания.

Что явно отличается от количества IP в п1 .....

Надо думать.
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617954
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Заказчик просил в этом случае вывести 1
Согласно техзадания.Угу... вот и получается тут рекурсия, формально бесконечная, а текущие версии MySQL не умеют рекурсивных CTE, посему приходится реализовывать логику либо в процедурах, либо в переменных. Но в данном случае я не вижу, как организовать правильную сортировку для обработки переменными...
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617956
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заводим третье поле "группа"
И заполняем его циклически.

В неSQL логике вроде решается....
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617960
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Заводим третье поле "группа"
И заполняем его циклически.Именно это я и имел в виду, говоря
Akinaзаменять user на, скажем, MIN(user)
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617966
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедов МосолЕсть таблица history:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
user | ip
aaa   | 1
aaa   | 2
bbb   | 3
bbb   | 1
ccc    | 4
ccc    | 5
Нужно получить количество уникальных пользователей. Уникальным считаются пользователи, у которых не было одинаковых ip. То есть, в данном случае, aaa и bbb не уникальны и должны посчитаться как один, а результат должен быть равен 2.У ccc тоже не было одинаковых ip, почему они в результат не попали?
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617967
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. схематично это будет что-то типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create function getcount()
alter table `table` add column grp;
update `table` set grp=user;
do
    update `table` t1, table t2
    set t1.grp = least(t1.grp, t2.grp), t2.grp = least(t1.grp, t2.grp)
    where t1.ip = t2.ip;
loop until affected_rows()=0;
select @res := count(distinct grp) from `table`;
alter table `table` drop column grp;
return @grp;
end;
...
Рейтинг: 0 / 0
Выбрать пользователей с уникальными IP
    #39617968
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftУ ccc тоже не было одинаковых ip, почему они в результат не попали?У него две группы - первая включает юзеров aaa и bbb, вторапя - юзера ссс. Потому и ответ - 2.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать пользователей с уникальными IP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]