Просьба помочь в решении следующего вопроса.
Есть две таблицы:
Таблица users:
id, user, pass
1, user1, pass1
2, user2, pass2
3, user3, pass3
Таблица log:
id, id_users, date_time, ip
1, 1, 2017-03-11 22:22:22, 192.168.1.1
2, 1, 2017-03-11 22:32:22, 192.168.1.1
3, 1, 2017-03-11 22:42:22, 192.168.1.5
4, 2, 2017-03-11 23:00:22, 192.168.1.10
5, 2, 2017-03-11 23:05:22, 192.168.1.10
6, 3, 2017-03-11 23:55:22, 192.168.1.22
Как вывести данные из двух таблиц я знаю. Мне нужно, чтобы по каждому юзеру была статистика его заходов и не было дублей в зависимости от кол-ва записей в таблице log, т.е. к каждому юзеру в отдельной таблице все ip.
Сейчас происходит так:
user1, 2017-03-11 22:22:22, 192.168.1.1
user1, 2017-03-11 22:32:22, 192.168.1.1
user1, 2017-03-11 22:42:22, 192.168.1.5
user2, 2017-03-11 23:00:22, 192.168.1.10
user2, 2017-03-11 23:05:22, 192.168.1.10
и т.д.
GROUP BY не предлагать, т.к. все будет сгруппировано и в результате я увижу только один ip.
Мне бы хотелось, чтобы вывод был таким образом:
user1, 2017-03-11 22:22:22, 192.168.1.1
2017-03-11 22:32:22, 192.168.1.1
2017-03-11 22:42:22, 192.168.1.5
user2, 2017-03-11 22:22:22, 192.168.1.1
2017-03-11 23:00:22, 192.168.1.10
2017-03-11 23:05:22, 192.168.1.10
Очень прошу помочь. Заранее спасибо
Функция GROUP_CONCAT:
SELECT u.user, GROUP_CONCAT(CONCAT(l.date_time, ' - ', l.ip))
FROM users u
JOIN log l ON l.id_users = u.id
GROUP BY u.id
Запрос вернёт весь лог для юзера в одной строке, позже его можно explode
ить для вывода.
Впрочем, можно также просто отсортировать по ORDER BY u.user, l.date_time
, чтобы логи одного пользователя шли подряд.
Тогда перед выводом, можно проверять, что в текущей строке пользователь, как в предыдущей и не выводить его.
Также можно произвести группировку результатов выборки самостоятельно:
$list = [['user': 'alice', 'date_time': 0, 'ip': '::1'], ['user': 'alice', 'date_time': 2, 'ip': '::1']];
$grouped = [];
foreach ($list as $row) {
if (!isset($grouped[$row['user']])) grouped[$row['user']] = [];
grouped[$row['user']][] = $row;
}
unset($list);
Теперь несложно каждому пользователю вывести необходимый rowspan
, например.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я начал изучать производство сайтов, и первый же пример из книжки не хочет выполняться
Здравствуйте, нужен код для следующего дела: надо заменить две разные буквы в слове на них же ( буквы вручную надо вписывать, "м" и "п"), то есть...
Добрый деньРади самообучения решил написать свой фреймворк, столкнулся со следующей проблемой