Здравствуйте, уважаемые программисты! Намереваюсь реализовать счетчик посещений (зарегистрированными пользователями) некоторых страниц своего сайта, причем важно, чтобы каждый пользователь отмечался только один раз. Никак не могу придумать хороший вариант. Есть вот такие две идеи: 1. Создать в БД таблицу, со столбцами: counterID, pageID, userID, получается для каждой страницы будет своя строчка, в которую будет записан ID страницы и ID пользователей посещающих её, в виде строки UserName01, UserName02, UserName03, ... Идея плоха тем, что я не знаю какой размер ячейки userID указать, и потом, когда пользователей станет много, это получится огромнейшая строка, с которой работать будет не удобно. 2. Создать такую же, как и в первом варианте таблицу и записывать каждое уникальное посещение новой строкой, т.е. 1 page01 UserName01 2 page01 UserName02 3 page02 UserName01 4 page02 UserName02 ... N pageN UserNameN В этом случае будет таблица с огромным количеством строк, увеличивающаяся с каждым новым пользователем и каждой новой страницей. Других вариантов у меня нет, я в тупике. Может я целиком неправильно подхожу к этому вопросу? Подскажите, пожалуйста, в каком направлении двигаться? Есть ли какие-то лаконичные решения данной задачи? Заранее спасибо.
Если я Вас правильно понял, предлагаю свой вариант: При посещении определенной страницы(на которой необходимо вести счетчик) будет производится запрос к БД таблицы такого вида: id INT, userId INT, count INT id-номер страницы user- это id пользователя из таблицы с зарегистрированными пользователями! count-количество посещений. Из запроса мы должны узнать есть ли в этой таблицы уже такой пользователь(ну и соответственно к какой страницы мы обращаемся) если есть то ++ к count, если нет, то создаем новую строку в таблице и записываем туда данные!
Спасибо за ответ, но это немного не то, мне нужно узнать сколько уникальных посетителей было на определённой странице? Т.е. таблица вида ID INT, pageID INT, userID INT, а потом подсчитывать сколько раз в таблице встречается определённый pageID. Только меня смущает тот факт, что строк в таблице у меня будет: (кол-во страниц) * (кол-во уникальных посетителей)... если уникальных посетителей будет много, то таблица будет очень большая. Я плохо знаком с такими тонкостями БД. Сильно ли такое кол-во строк замедлит скорость запроса к этой таблице БД?
Так если сделать как я написал выше, и потом сделать запрос типа: SELECT count(userID) FORM table WHERE pageID=1; И я немного не понимаю смысл вот этого: Код (Text): Только меня смущает тот факт, что строк в таблице у меня будет: (кол-во страниц) * (кол-во уникальных посетителей)... Если можно объясните по подробнее!
Предположим, у меня 5 страниц, которые нужно отслеживать, и 10 пользователей. Если каждый пользователь зайдёт хотя бы по одному разу на каждую страницу, то у меня уже будет 50 строк в таблице в БД, вида: 1, page01, user01 2, page01, user02 3, page01, user03 ... 10, page01, user10 11, page02, user01 12, page02, user02 13, page02, user03 ... ... 50, page05, user10 в принципе, ничего страшного, но если пользователей будет 1000, а страниц 2000, то не сильно ли это огромная таблица получится? так можно делать? или может есть более лаконичные варианты хранения такого рода данных? заранее благодарю за ваш ответ.
Моё сугубо личное мнение, что в этом нет ничего страшного, mysql выдержит намного больше, ведь зачем тогда нужна БД если в ней хранить 10 записей И вообще я очень сильно сомневаюсь что у вас будет так много страниц, возможно если только пользователей. А для полного удовлетворения напишите цикл записи данных в тестовую таблицу(допустим миллион записей) и попробуйте поработать с тем, что получиться, и Вы увидите как быстро выполняются запросы.
пару миллионов легко выдерживает. А если еще вместо user10 и page05 будут просто цифры - ID пользователя и ID страницы соответственно - то и миллионов 5 можно легко.