Intereting Posts
Объединение категорий (запросы с несколькими терминами таксономии) эквивалент wp_reset_query для WP Ecommerce WordPress Multisite – настройка локальной копии разработки Пользовательский тип сообщения, не отображающий все записи Условный тег для подкатегорий? Я хочу создать разбивку на страницы для моего настраиваемого архива типа сообщения, который я показываю с помощью цикла Полная функция шаблона страницы Я использую add_meta_box (), но хочу включить TinyMCE editor * и * Media Uploads для каждого окна Как вставить сообщение из внешнего php-файла? Удалить пользовательский тип сообщения из доступных через URL-адрес? Следующие и предыдущие кнопки для навигации Как загрузить 2 случайных страницы? Невозможно использовать встроенную функцию плагина для установки / обновления WordPress WordPress Search возвращает неверные результаты Сколько плагинов безопасности слишком много?

Изменение базы данных: пользователи, голосовавшие

У меня есть система голосования, которая хранит и отображает голосование как целое число. Когда кто-то нажимает, плюс голос увеличивается на 1, когда минус – уменьшается на 1 (точно так же, как на этом сайте). Проблема в том, что голоса основаны на файлах cookie, поэтому, когда они обновляются, пользователь может снова проголосовать. Я хотел бы ограничить это только одним голосом за пользователя.

Теперь я хотел бы попросить совета относительно дизайна базы данных. В настоящее время у меня есть пользовательский тип сообщений «Вопрос» и стандартные пользовательские таблицы WordPress в базе данных. Вопрос имеет настраиваемое поле, называемое голосованием, которое хранит голосование как одно целое. Цель состоит в том, чтобы иметь возможность назначать голосование на вопрос таким образом, чтобы я мог печатать всех пользователей, голосовавших по конкретному вопросу, или проверить, проголосовал ли пользователь по конкретному вопросу.

Должен ли я создать другую таблицу с голосами? Или добавить новое поле в Вопрос или Пользователи? Я не уверен в логике базы данных, которую я должен реализовать, поэтому я был бы признателен за любые советы.

Solutions Collecting From Web of "Изменение базы данных: пользователи, голосовавшие"

Я бы немного изменил ваш дизайн, чтобы вы могли использовать данные, а также предотвращать логические ошибки, которые могут испортить вашу статистику.

Сначала я бы сохранил вверх и вниз голоса как два отдельных значения мета. Причина в том, что вы можете отображать их, если хотите, а также подсчитывать голоса в процентах от целого. Например, 45 вверх, 10 вниз или 81% одобряют этот вопрос, и 55 человек проголосовали. Затем вы можете показать эту статистику пользователям. Как вы это делаете сейчас, можно показать только чистый положительный выигрыш, который не дает никакого контекста реальной популярности, т. Е. +3 не так полезен.

Профилактика ошибок логики: если ваш код делает +1 или -1, а ваш код имеет плохую логику, тогда все ваши голоса будут ошибочными. Легче просто хранить голоса в соответствии с потребностями пользователя, а затем использовать методы поиска / чтения, чтобы затем выполнить свою логику. т.е. для сохранения целостности данных вы никогда не хотите писать деструктивную логику. Легче исправить ошибку чтения 45up / 55, а не изменять «голосование» набором записей. Как вы можете исправить данные, которые вы перезаписали, является моей точкой.

Файл cookie хорош, чтобы предотвратить несколько запросов в сеансе, но лучший способ отслеживать пользователя с куки-файлом или без него – это использовать ajax и после того, как они попробуют провести голосование по поиску вопроса, пользователи голосуют за текущий вопрос (при условии, что cookie не был установлен или истек). Делая это, вы также можете позволить им изменить свой голос. Это означало бы, что вам нужно будет сделать одну из двух вещей, которые, я думаю, могут быть легкими:

Укажите таблицу регистрации того, как проголосовал пользователь, который отслеживает их имя пользователя / пользователя, номер вопроса и их голос. Это было бы стандартным способом non wordpress в чистых системах mysql, но также может иметь смысл для вас здесь. Другой вариант может состоять в том, чтобы сериализовать голоса пользователей по всем указанным вопросам и хранить их как один объект. Теперь, поскольку ваша информация краткая о вашей системе, трудно дать окончательный ответ на все, что лучше; использовать другую таблицу или сериализовать мета-поле в мета-таблице. Это должно дать вам некоторые идеи.