閱讀,這聽起來像你對我是將外鍵列表存儲在逗號分隔的字符串字段中以表示多對多關係。這不是一個好主意。
你應該做的是創建一個表來存儲關係。
例如,假設您有一張名爲users
的表,並且您想要在它們之間存儲朋友關係。你在做什麼是這樣的(注:我意識到這其實不是一個很好的例子,因爲我寫的結束,但我與它堅持現在):
id | name | friends
------+--------+-----------
1 | Dave | 2,4
2 | Bob | 1
3 | Tom | 4
4 | Bill | 1,3
而什麼更好的做法做的是這樣的:
users
id | name
------+--------
1 | Dave
2 | Bob
3 | Tom
4 | Bill
friends
id | user | friend
------+--------+----------
1 | 1 | 2
2 | 1 | 4
3 | 2 | 1
4 | 3 | 4
5 | 4 | 1
6 | 4 | 3
要選擇戴維的朋友,你可以做
SELECT u.*
FROM friends f
JOIN users u ON u.id = f.friend
WHERE f.user = 1
...並刪除戴維和鮑勃(你想在這裏做什麼)之間的關係,你可以簡單地做
DELETE FROM friends
WHERE (
user = 1 AND friend = 2
) OR (
user = 2 AND friend = 1
)
+'超越了這個問題,通過閱讀之間的線條。尼斯:) – Zuul
謝謝,我正在尋找如何規範化MySQL數據庫的答案。快速提問,因爲我是MySQL的新手 - 在選擇Dave的朋友時,你和你的意思是什麼? –
'u'和'f'是表名別名。基本上,它們會縮短引用'JOIN'ed查詢中的每個表。你可以只寫'SELECT users。* FROM friends JOIN users ON users.id = friends.friend WHERE friends.user = 1',這意味着同樣的事情。有些情況下你需要*使用別名,但這不是其中的一種,它們可能超出了這個問題的範圍。 – DaveRandom