Как бы я сохранил настройки пользователя? (PHP)?

Я занимаюсь разработкой сайта типа рынка акций. Мне было интересно, как я мог бы позволить пользователям сохранять котировки компаний в список наблюдения со всеми обновленными данными, похожими на многие другие, доступные там.

Буду признателен за любую помощь по этому вопросу.

1 ответ

Решение

Для всего, что всегда установлено для каждого пользователя, вы должны сохранять это в Users стол, по обычной нормализации. Что касается необязательного конфига, мне нравится следующая структура таблицы:

TABLE Users:
  id INT AI
  name VARCHAR
  ...

TABLE User_Settings
  user_id INT PK,FK
  name VARCHAR PK
  type BOOL
  value_int INT NULL
  value_str VARCHAR NULL

куда User_Settings.type указывает, следует ли ссылаться на целочисленное или строковое поле.

то есть:

INSERT INTO Users (id, name) VALUES (1, 'Sammitch');
INSERT INTO User_Settings (user_id, name, type, value_int) VALUES (1, 'level', 1, 75);
INSERT INTO User_Settings (user_id, name, type, value_str) VALUES (1, 'lang', 0, 'en');

И для вопроса ВСТАВИТЬ / ОБНОВИТЬ:

INSERT INTO User_Settings (user_id, name, type, value_str) VALUES (1, 'lang', 0, 'fr')
  ON DUPLICATE KEY UPDATE value_str='fr';

Кроме того, как говорит большинство других людей, сериализация и сохранение предпочтений не особенно хорошая идея, потому что:

  1. Вы не можете получить одно значение с помощью запроса, вы должны извлечь всю сериализованную строку, десериализовать ее и отбросить ненужные данные.

  2. Это легко испорчено, и трудно восстановить.

  3. В добыче сложно написать необработанный запрос, т. Е. Глобально исправить определенную настройку.

  4. Вы храните то, что по сути является табличными данными, в одном поле таблицы.

Это должно сделать работу. Если это так, пожалуйста, не стесняйтесь принять ответ.

Другие вопросы по тегам