我有兩張表。 'users'and'paying_users'MYSQL Views?加入兩張表
Paying_users有關於付款的更多信息。
我正在尋找一種插入方式,我將能夠強制這兩個表通用的唯一用戶名。 因此,如果'Shelly'在'用戶'上,我將無法將'Shelly'插入'paid_users'。 MYSQL有可能嗎?
我有兩張表。 'users'and'paying_users'MYSQL Views?加入兩張表
Paying_users有關於付款的更多信息。
我正在尋找一種插入方式,我將能夠強制這兩個表通用的唯一用戶名。 因此,如果'Shelly'在'用戶'上,我將無法將'Shelly'插入'paid_users'。 MYSQL有可能嗎?
爲什麼不使用用戶作爲主表並將用戶的付款用戶(我認爲這是用戶的一部分)與用戶的id關聯起來?然後,你不會有重複的問題。
users:
id: ...
name: ...
other information
paying_users:
id: ...
users_id: ...
other information:
我不認爲這是可以做到這一點在MySQL中。如果可能的話,設計單個用戶表會更好。然後,您將創建一個輔助表,其中包含正在付款的客戶的用戶標識和夥伴信息,並且您可以在必要時加入
嘗試將您的INSERT與SELECT結合使用。例如:
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
真的在這裏發生了什麼?什麼是WHERE返回?我不熟悉那種語法。 SELECT 1返回什麼?(SELECT COUNT(1)FROM users WHERE username ='Shelly')= 0 ....意味着你能解釋一下嗎?謝謝 – Ted
語句'SELECT COUNT(1)FROM users WHERE username ='Shelly''將返回用戶名爲'Shelly'的用戶數量。這個語句的括號將把結果插入到周圍的where子句中,使其基本上成爲'WHERE%matching_users%= 0'。當沒有匹配的用戶時,這將只會返回一行,因此只有在沒有匹配的用戶時纔會插入。但這並不是真正實現它的最好方法,如果更改基礎數據庫設計是一種選擇。在那種情況下,我會選擇ypercube的答案。 – Gus
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)
users
(所以他name
是在所有用戶中都是唯一的)id
添加到表paying_users
以及與付費用戶相關的其他數據。其他優點:
當你有一個決定支付(簡單)的用戶,你只是做第2步
當你有一個paying_user他支付期限屆滿,您只從paying_users
表中刪除他的記錄,所以他仍然是一個簡單的用戶。
但是,如果雪莉在pay_users?我可能會意外地將她插入到用戶中並創建兩個同名用戶 – Ted
我會將每個用戶都放入用戶中,或者如果用戶或者不支付用戶,那麼會創建一個表user_data,其中存儲用戶和用戶的所有數據其他人僅用於其他信息。如果付款是唯一的區別,您還可以將其存儲在一張表中,並使用布爾字段「支付」來將它們彼此分開。下定決心哪個版本適合你... – Andreas