2013-03-26 61 views
0

我正在創建一個MySQL數據庫,其中有兩個表格,一個用於博客,一個用於他們的位置。我所做的是blogs中的一個字段,它是一串用逗號分隔的位置id:1,5,7。然後在我的PHP腳本中,我可以爆炸()該字符串並獲取位置。MySQL一對多關係。不同的表或PHP處理?

如果我想使用MySQL查詢查找位置的所有博客,問題就來了。

我應該爲關係創建另一個表嗎?也許博客1位置1,博客1位置5,博客1位置7.三行代表前面的例子。這樣我只會選擇查詢中該位置的博客。另一種方式,我將不得不選擇所有的博客,並逐一檢查他們中的每一個。

您認爲更快更清潔?

謝謝!

+1

是的,你應該創建另一個交叉表。實際上,它看起來像m:n關係(因爲位置X似乎可以在多個博客中使用)。否則,您應該可以使用「位置」表將其鏈接到單個博客項目。 – raina77ow 2013-03-26 15:31:15

回答

0

正確的是,在關係數據庫設置中執行此操作的最佳方式是第三個表(有時稱爲Junction Table),用於處理博客和位置之間的關係。你所描述的是一種多對多的關係(或者是雙向的一對多關係)。

Here是一個描述它比我好一點的鏈接。

+0

作爲第一個和鏈接,我選擇你的答案。謝謝!你是對的,我誤認爲是一對多和多對多的:P關於密鑰或搜索密鑰的任何提示?我想學習以最好的方式做到這一點。 – Ryckes 2013-03-26 15:42:06

+0

一旦您設計了表格並使用數據填充表格,您就可以非常輕鬆地加入以獲取所需的數據。 我建議的一件事是有一個主鍵,即使它是一個自動增加整數,以確定Blog_Location的唯一行,所以表應該有3個字段:BlogLocationID(UNIQUE),BlogID,LocationID - 然後根據你的數據也許這個組合可以使用一個日期字段BlogLocationDate(但我不太確定沒有熟悉你的數據) – Josh 2013-03-26 15:50:12

+0

我想構建查詢。我想要的是按照他們的名字,獲取博客列表,並在每個博客旁邊列出位置列表(他們的位置)。所以,我有一個博客表,其中包含名稱和ID(簡單情況),一個包含名稱和ID的位置表以及一個包含博客和位置(以及您建議的ID)的聯結表。我怎樣才能在單個查詢中獲取每一行,博客,名稱,ID和位置列表?謝謝! – Ryckes 2013-03-26 18:23:59

2

不同的桌子更乾淨。事實上,它是唯一的選擇,因爲它是關係數據庫的基礎。

0

表示關係的第三張表是真正實現的唯一途徑。