MYSQL Просмотров? Соединение двух столов - PullRequest
0 голосов
/ 14 августа 2011

У меня есть две таблицы.'users' и 'payment_users'

Paying_users имеют немного больше информации о платежах, конечно.

Я ищу способ, которым после вставки я смогу принудительно ввести уникальное имя пользователя, котороеявляется общим для обеих таблиц.Так что если «Шелли» на «пользователях», я не смогу вставить «Шелли» в «Payment_users».Это возможно на MYSQL?

Ответы [ 4 ]

3 голосов
/ 14 августа 2011

Почему вы не используете пользователей в качестве основной таблицы и не связывает pay_users (которые являются частью пользователей, я считаю) с идентификатором пользователей? Тогда у вас не будет проблем с дубликатами.

users: 
  id: ...
  name: ...
  other information

paying_users:
  id: ...
  users_id: ...
  other information:
2 голосов
/ 15 августа 2011

Paying_users все еще пользователи, верно? Тогда это решит вашу проблему:

users: 
  id: ...
  name: ...
  other information that relates to a user
  PRIMARY KEY: id
  UNIQUE KEY: name

paying_users:
  id: ...
  other information that relates a paying user only
  PRIMARY KEY: id
  FOREIGN KEY: id
      REFERENCES users(id)
  • С этой структурой, когда вы хотите добавить pay_user, вы делаете это в два шага:
    • 1 добавить его в таблицу users (поэтому его name уникален для всех пользователей)
    • 2 добавьте его id в таблицу paying_users вместе с другими данными, касающимися только платных пользователей.

Дополнительные преимущества:

  • Когда у вас есть (простой) пользователь, который решает заплатить, вы просто делаете шаг 2.

  • Когда у вас есть pay_user, у которого истек срок его оплаты, вы удаляете его запись только из таблицы paying_users, поэтому он по-прежнему остается простым пользователем.

1 голос
/ 14 августа 2011

Я не думаю, что это возможно сделать в MySQL. Было бы лучше, если возможно, спроектировать таблицу для одного пользователя. Затем вы создадите вспомогательную таблицу с идентификатором пользователя и информацией о клиенте для тех клиентов, которые платят, и вы сможете присоединиться при необходимости

0 голосов
/ 14 августа 2011

Попробуйте объединить вашу ВСТАВКУ с ВЫБРАТЬ.Например:

INSERT INTO paying_users
SELECT 'Shelly', 'other', 'column', 'values'
WHERE (SELECT COUNT(1) FROM users WHERE username = 'Shelly') = 0

Я не уверен, не попробовав эту конкретную конструкцию, но вам может понадобиться создать таблицу с 1 строкой для выбора ваших данных:

INSERT INTO paying_users
SELECT 'Shelly', 'other', 'column', 'values'
FROM (SELECT 1) AS dummy
WHERE (SELECT COUNT(1) FROM users WHERE username = 'Shelly') = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...