Intereting Posts
Каков наилучший способ реализовать разбиение на страницы ajax на пользовательские шаблоны на основе запросов? Удалить пробелы в конце сообщений? tax_query в WP_Query проблема Изменение фонового изображения на странице. Создайте страницу, которая может использоваться для разных URL-адресов. Как получить URL-адрес изображения из Media-Upload в сообщении? Сценарии не загружаются при использовании действия wp_enqueue_scripts Любой способ скрыть текст сообщений в блогах, если он длиннее 300 символов Получить значение из db для пользовательской формы контакта загрузка страницы слишком медленно Lazy Load с использованием разбиения на страницы WP_Query Объедините tax_query и meta_query в WP_Query Как WordPress интерпретирует PHP-код? Как создать форму электронной почты, в которой используется программа электронной почты гостей, чтобы отправить ее Как создать WP_Query с помощью кода?

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

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

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

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

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

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

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

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

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

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