powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / сложный запрос. профи велкам
8 сообщений из 8, страница 1 из 1
сложный запрос. профи велкам
    #32142070
MatrixMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
введение:
реализую задачу перлом, но уж очень большие затраты идут при выполнении кода, поэтому решил оптимизировать за счет продуманных запросов к БД

итак.
есть таблица.
поля: session_id ip_id

что за таблица: в ней лежит статистика посещения юзеров (сесс ид) и их ИП (ип ид)
у одной сессии может быть разные ип, а может и один.
гимор в том, что есть пользователи, у которых не включены куки - и сесс ид для них генерится постоянно новая(и в базу добавляется тоже).
и таких пользователей можно определить по единичности сесс ид в таблице.
вот их надо и посчитать

как ? только отобрав ВСЕ уникальные сесс ид, и посчитав по ип ид
т.е.
получение количества session_id которые существуют в базе в единственном экземпляре, НО те, у которых одинаковый ip_id
или
из множества уникальных session_id надо найти кол-во уникальных ip_id
или
у нас есть множество single-session_id ,для такого множества надо найти кол-во уникальных ip
или
нужно посчитать всех пользователей с неповторяющимися сессиями как один юзер, с учетом что разные ИП - разные люди

пример таблици:
sesion_id ip_id
1000 1
1000 1
1000 2
1000 2
1001 3
1002 3
1003 3
1004 4
1005 4
1006 4

1001-1003 и 1004-1006 - присутствуют в единичном случае.
но ip_id у 1001-1003 одинаков (3)
и для 1004-1006 то же (4)
надо получить число неповторяемых сесс_ид НО имеющих один ip_id
в нашем примере - 2
...
Рейтинг: 0 / 0
сложный запрос. профи велкам
    #32142171
BigHarry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опираться на то, что "разные ИП - разные люди" - имхо - неправильно, так как через один IP (прокси-сервер) может ходить куча народа...
...
Рейтинг: 0 / 0
сложный запрос. профи велкам
    #32142178
MatrixMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
разный ИП вкупе! с отключенными куками
пользователи считаются по ид_сессии, который хранится вкуке.
ТОЛЬКО те юзера, которые неиспользуют куки, считаются по ИПам.
а больше никак.
...
Рейтинг: 0 / 0
сложный запрос. профи велкам
    #32142196
BigHarry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что - не может быть такого - что несколько пользователей ходит через один прокси у у них отключены куки?
Ещо куки может убивать прокси-сервер...
...
Рейтинг: 0 / 0
сложный запрос. профи велкам
    #32142226
MatrixMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может.
но что прикажешь делать?
каким еще образом идентифицировать пользователей?
...
Рейтинг: 0 / 0
сложный запрос. профи велкам
    #32142345
MatrixMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
яяхххууу! сделал. правда через временную таблицу.. но все-таки без использования перла (без генерации кучи выборок)
create temporary table xxx(
id int
);
insert into xxx select session_id from stat_request group by session_id having count(session_id)=1; # получаем список уникальных сессий, которые встречаются только один раз. и записываем во временную таблицу.
select count(ip_id), ip_id from stat_request , xxx where stat_request.session_id=xxx.id group by ip_id # количество строк результата - количество ип, для которых сессии встречаются только один раз
...
Рейтинг: 0 / 0
сложный запрос. профи велкам
    #32142360
Prof.Nimnul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если отбросить ненадежность такой идентификации пользователей, то вот решение задачи:

CREATE TEMPORARY TABLE unique_sessions
(
session_id INT,
ip_id INT,
count INT
);

INSERT INTO unique_sessions
SELECT session_id, ip_id, count(*) AS count
FROM sessions
GROUP BY session_id
HAVING count = 1;

SELECT count(DISTINCT ip_id) FROM unique_sessions;
...
Рейтинг: 0 / 0
сложный запрос. профи велкам
    #32142485
medved
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select 
	(count(distinct sesion_id)=count(sesion_id)) as is_u
from
		sess
group by
		ip_id
having
		is_u =  1 ;

Вроде как бы кол-во записей полученных в этом запросе должно выдавать нужное тебе число
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / сложный запрос. профи велкам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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