Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать пользователей с уникальными IP / 19 сообщений из 19, страница 1 из 1
21.03.2018, 03:43
    #39617892
Выбрать пользователей с уникальными IP
Есть таблица 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
21.03.2018, 07:15
    #39617905
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
Сделай промежуточную таблицу с юзерами, имеющими неуникальные IP.
Потом исключи этих юзеров из общего списка.
...
Рейтинг: 0 / 0
21.03.2018, 07:29
    #39617909
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
А если нужно только количество, без списка, то еще легче.
отними от общего числа клиентов количество имеющих пересекающиеся IP.
...
Рейтинг: 0 / 0
21.03.2018, 07:48
    #39617915
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
Дедов МосолУникальным считаются пользователи, у которых не было одинаковых ip.Странные у вас понятия об уникальности.

Код: sql
1.
2.
3.
SELECT COUNT(*) 
FROM 
(SELECT null FROM history GROUP BY user HAVING COUNT(DISTINCT ip)>1) t
...
Рейтинг: 0 / 0
21.03.2018, 07:51
    #39617916
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
ИМХО это выборка количества клиентов, имеющих более одного ip
...
Рейтинг: 0 / 0
21.03.2018, 07:52
    #39617917
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
Код: 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
21.03.2018, 07:57
    #39617919
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
Упс... недочитал вопрос... у меня получается выборка юзеров, которые ни с кем не пересекаются вообще.
Для подсчёта же
Дедов Мосолв данном случае, aaa и bbb не уникальны и должны посчитаться как один
придётся использовать три копии таблицы...
...
Рейтинг: 0 / 0
21.03.2018, 07:59
    #39617921
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
А ещё лучше - процедуру со временной таблицей, в которой заменять user на, скажем, MIN(user), пока FOUND_ROWS() ненулевой, и только потом считать COUNT().
...
Рейтинг: 0 / 0
21.03.2018, 08:16
    #39617928
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
Зачем такие извращения?
Три элементарных действия.
1. Выделяем те IP, которые встречаются у разных юзеров.
2. Выделяем тех юзеров, у которых есть эти IP
3. Исключаем из общего списка пользователей юзеров из п2
...
Рейтинг: 0 / 0
21.03.2018, 08:37
    #39617933
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
4. к получившейся цифре добавить количество IP из п1
...
Рейтинг: 0 / 0
21.03.2018, 08:39
    #39617935
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
982183 , а как тебе вариант
userip1112222333344445......
Количество "сцепленных" юзеров формально ничем не ограничено...
...
Рейтинг: 0 / 0
21.03.2018, 08:41
    #39617936
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
И ещё так:
userip111222233331......
...
Рейтинг: 0 / 0
21.03.2018, 09:14
    #39617949
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
Заказчик просил в этом случае вывести 1
Согласно техзадания.

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

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

В неSQL логике вроде решается....
...
Рейтинг: 0 / 0
21.03.2018, 09:35
    #39617960
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
982183Заводим третье поле "группа"
И заполняем его циклически.Именно это я и имел в виду, говоря
Akinaзаменять user на, скажем, MIN(user)
...
Рейтинг: 0 / 0
21.03.2018, 09:45
    #39617966
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
Дедов МосолЕсть таблица 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
21.03.2018, 09:45
    #39617967
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
т.е. схематично это будет что-то типа

Код: 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
21.03.2018, 09:46
    #39617968
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать пользователей с уникальными IP
miksoftУ ccc тоже не было одинаковых ip, почему они в результат не попали?У него две группы - первая включает юзеров aaa и bbb, вторапя - юзера ссс. Потому и ответ - 2.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать пользователей с уникальными IP / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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