2011-08-14 99 views
0

我有兩張表。 'users'and'paying_users'MYSQL Views?加入兩張表

Paying_users有關於付款的更多信息。

我正在尋找一種插入方式,我將能夠強制這兩個表通用的唯一用戶名。 因此,如果'Shelly'在'用戶'上,我將無法將'Shelly'插入'paid_users'。 MYSQL有可能嗎?

回答

3

爲什麼不使用用戶作爲主表並將用戶的付款用戶(我認爲這是用戶的一部分)與用戶的id關聯起來?然後,你不會有重複的問題。

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

paying_users: 
    id: ... 
    users_id: ... 
    other information: 
+0

但是,如果雪莉在pay_users?我可能會意外地將她插入到用戶中並創建兩個同名用戶 – Ted

+0

我會將每個用戶都放入用戶中,或者如果用戶或者不支付用戶,那麼會創建一個表user_data,其中存儲用戶和用戶的所有數據其他人僅用於其他信息。如果付款是唯一的區別,您還可以將其存儲在一張表中,並使用布爾字段「支付」來將它們彼此分開。下定決心哪個版本適合你... – Andreas

1

我不認爲這是可以做到這一點在MySQL中。如果可能的話,設計單個用戶表會更好。然後,您將創建一個輔助表,其中包含正在付款的客戶的用戶標識和夥伴信息,並且您可以在必要時加入

0

嘗試將您的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 
+0

真的在這裏發生了什麼?什麼是WHERE返回?我不熟悉那種語法。 SELECT 1返回什麼?(SELECT COUNT(1)FROM users WHERE username ='Shelly')= 0 ....意味着你能解釋一下嗎?謝謝 – Ted

+0

語句'SELECT COUNT(1)FROM users WHERE username ='Shelly''將返回用戶名爲'Shelly'的用戶數量。這個語句的括號將把結果插入到周圍的where子句中,使其基本上成爲'WHERE%matching_users%= 0'。當沒有匹配的用戶時,這將只會返回一行,因此只有在沒有匹配的用戶時纔會插入。但這並不是真正實現它的最好方法,如果更改基礎數據庫設計是一種選擇。在那種情況下,我會選擇ypercube的答案。 – Gus

2

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) 
  • 採用這種結構,當你想添加一個paying_user,你做的兩個步驟:
    • 1他添加到表users(所以他name是在所有用戶中都是唯一的)
    • 2將他的id添加到表paying_users以及與付費用戶相關的其他數據。

其他優點:

  • 當你有一個決定支付(簡單)的用戶,你只是做第2步

  • 當你有一個paying_user他支付期限屆滿,您只從paying_users表中刪除他的記錄,所以他仍然是一個簡單的用戶。