Я сейчас работаю над рейтинговой системой PHP / MySQL. Чтобы пользователь мог оценивать, он должен войти в систему. Каждый пользователь имеет уникальный «UID». На сайте будет несколько экземпляров рейтинга (по одному для каждой игры, в моем случае), и мне нужен эффективный способ хранения списка UID в строке MySQL (по одной строке MySQL в таблице рейтингов для каждого экземпляра системы рейтинга). ) вести подсчет голосовавших.
В других системах я видел, что список хранится в сериализованном массиве PHP. Каждый раз, когда пользователь голосует, сериализованный массив должен быть извлечен, не сериализован, новый UID вставлен, массив повторно сериализован, и строка MySQL ОБНОВЛЕНА. Каждый раз, когда страница загружается, этот список снова должен быть сериализован и проверен, чтобы проверить, проголосовал ли пользователь, просматривающий страницу, чтобы убедиться, что пользователь не голосовал дважды.
Это кажется неэффективным и громоздким. Есть ли в MySQL встроенная функция списка, чтобы этот процесс был более эффективным? Есть ли еще какие-нибудь умные способы, которыми я мог бы решить эту проблему?
Я рассмотрел одну возможную альтернативу - забыть сериализацию и сохранить UID в поле типа TEXT в базе данных MySQL. Я бы просто добавил некоторые нечисловые символы после каждого UID (скажем, точка [.]). Чтобы добавить запись пользователя, я бы просто конкатенировал UID в конце поля TEXT и затем точку. При проверке, если пользователь уже проголосовал, я мог просто "ВЫБРАТЬ * ИЗ таблицы, ГДЕ голосов ="% $ UID.% '; ". Будет ли это работать более эффективно или есть более элегантный способ выполнения работы?
Последующее сообщение о структуре таблицы ... Эффективная структура таблицы MySQL для рейтинговой системы