Система лайков.

Lolpetr

Новичок
В интернете можно сказать нету ничего о так называемых самодельных "лайков". Поэтому я начал изобретать. Нужно было сделать так, чтобы 1 пользователь мог только 1 раз лайкнуть новость, но как мне кажется, сделал я это не совсем разумно.
У меня в БД хранятся профили юзеров, там есть строка лайков, в ней расположены ид новости через "-".
Кто может посоветовать более лучшую реализацию лайков? А то в моем случае, юзер сможет поставить всего примерно 800 лайков.
Надеюсь, все понятно объяснил.
ЗЫ: Варианты с хранением куки и IP адресов в БД сразу отпадают.
 

Yuriy_S

-=PHP-Club=-
зарегистрированный пользователь или посетитель? тут есть значительная разница.
 

Lolpetr

Новичок
Зарегистрированный, я же говорил про хранение профилей в БД..
 

Yuriy_S

-=PHP-Club=-
ну так и храни данные в отдельной таблице likes, указывай там user_id, news_id и если лайки будут не только в новостях, то и module_id или type_id. Стандартная схема жеж.
А можно вообще хранить хэш MD5 например в одном поле, в виде MD5($user_id . $type_id . $item_id) и проверяй по записи в этой таблице, может юзер ставить лайк или уже поставил.
Если лайков много, то что бы не дергать базу постоянно можно при авторизации юзера на сайте выгружать список установленных лайков в сессию или кеш-файл, а затем брать оттуда и сравнивать.
 

Lolpetr

Новичок
ну так и храни данные в отдельной таблице likes, указывай там user_id, news_id и если лайки будут не только в новостях, то и module_id или type_id. Стандартная схема жеж.
А можно вообще хранить хэш MD5 например в одном поле, в виде MD5($user_id . $type_id . $item_id) и проверяй по записи в этой таблице, может юзер ставить лайк или уже поставил.
Если лайков много, то что бы не дергать базу постоянно можно при авторизации юзера на сайте выгружать список установленных лайков в сессию или кеш-файл, а затем брать оттуда и сравнивать.
Я создавал отдельную таблицу, но смысл? Ограничение все равно будет, разницы нет. К примеру, взять движок этого форума, тут есть лайки, а как они сделали их... А на счет md5 и кэш спасибо. Просто думал, есть более лучший способ..
 

Yuriy_S

-=PHP-Club=-
Какие ограничения? Ты суть то понял?
С отдельной таблицей хоть милиард записей можно хранить.
 

Yuriy_S

-=PHP-Club=-
Это я как пример привел, что можно в виде какой-то одной строки хранить, md5 конечно не нужен, наверно неудачный пример.
 

Lolpetr

Новичок
Какие ограничения? Ты суть то понял?
С отдельной таблицей хоть милиард записей можно хранить.
Суть понял, но не до конца. Если Вы хотите для каждого лайка создавать новую строку в БД, то этот способ не имеет смысла. Пока в такой огромной таблице мускул что-либо найдет, юзер с сайта выйдет.
А если Вы про то, что создать в отдельной таблице строку с именем юзера и его лайками, то я тоже не вижу в этом смысла. Во 1-ых, у varchar есть ограничение на кол-во символов, пусть и не малое, но есть. Во 2-ых, почти такая же система у меня стоит сейчас на сайте, только все хранится в профиле юзера.
Или Вы хотите сказать, что над таким большим количеством записей можно не заморачиваться?
 

Yuriy_S

-=PHP-Club=-
Что за ерунда?
Начнем с того, большое количество планируемых записей, это сколько? 10.000, 50.000, 100.000, миллион?
 

Yuriy_S

-=PHP-Club=-
миллион записей для запроса выборки по id-у - ничтожное количество. Это займет несколько миллисекунд, если, конечно, сервер с базой не будет полностью перегружен.
 

Lolpetr

Новичок
Если я правильно понял, что на счет производительности БД можно не заморачиваться, то вопрос исчерпан.
 

Фанат

oncle terrible
Команда форума
вообще-то, скорость работы современных процессоров - гигагерцы. а это - миллиарды операций в секунду
при том, что для поиска нужной записи не нужно перебирать их все.
 

Фанат

oncle terrible
Команда форума
вопрос исчерпан, но я хотел бы отдельно отметить, что в ответе Yuriy_S читать надо только одну первую строчку.
остальное там какие-то никому не нужные фантазии.
 
Сверху