2012-02-12 48 views
0

我有一個MySQL數據庫,其中每一行代表一個播客節目。我想包括每個劇集的演出筆記,因此需要能夠通過PHP提取每行多個鏈接。mysql中每行有多個鏈接

什麼是最好的數據字段來實現這一目標?我想通過鏈接表包含鏈接可能是實現這一目的的唯一方法,但如果有人知道更簡單的方法,我很樂意聽到它。

+0

你的想法也許很好成爲你正在尋找的東西。如果你希望它更簡單一點,你可以添加一個與一個集(即單行)相關聯的鏈接列表作爲附加的CLOB字段,並在那裏存儲一個序列化數組(或者是PHP序列化或者JSON表示法)。你的問題有點含糊,至於你是否希望這些鏈接像每個情節的描述,或者更像是一個標籤,即能夠找到鏈接到同一頁面的情節... – dbrumann 2012-02-12 11:52:46

回答

1

我肯定會推薦使用新表格(podcast_link),因爲每個播客的鏈接數量都很靈活。由於要顯示鏈接時會解析鏈接,因此將text字段添加到podcast表中將不太有效。 這也可以讓你例如請計算每個播客的鏈接數量,因此您可以顯示「顯示相關鏈接(4)」,並且您可以向鏈接添加更多字段,這樣您不僅可以顯示鏈接,還可以顯示鏈接的標題。特別是前進中,您可能希望爲每個鏈接添加更多信息。

+0

這絕對是最吸引人的對我的方式。你是對的,它也會在晚些時候開放擴展功能。 – Ryan 2012-02-12 12:30:50

+0

使用JOIN解析PHP中的幾個鏈接和更復雜的MySQL查詢之間的性能差異可能是可以忽略的(如果它存在的話)。在使用序列化/反序列化PHP數組時,也可以計算鏈接並提供標題。我同意,使用額外的表格是更有前途的證明,即提供額外的功能,例如,顯示哪些劇集指的是相同的鏈接或有多少劇集使用鏈接,但是您的示例沒有顯示出這一點的好處,因爲它們同樣可以在只有一個附加字段的情況下執行。 – dbrumann 2012-02-12 13:02:38

+1

使用序列化數組要求您每次都解析整個數組,即使您只是想顯示計數,而不是在查詢中進行計數。這也是規範化的基礎,使數據更易於訪問,可用和可管理。 「你的例子沒有顯示出這個好處」 - 你不能指望我列出我希望的數據庫的全部功能。 – Richard 2012-02-12 13:15:28

0

explode()功能:

你必須保存你的鏈接,例如用如下結構: 數據庫中的行http:\\example.com\podcast01.mp3,http:\\example.com\podcast02.mp3,http:\\example.com\podcast03.mp3

那麼當你想提取它們,你可以很容易地使用explode()函數是這樣的:

$links= $row['links']; // your links in row 
$links_array = explode("," , $links);// now you have an array that you can easily access to each block of it. 

例如:

echo ($links_array[0]);// output : http:\\example.com\podcast01.mp3 

好運

+0

如果其中一個鏈接包含逗號,會發生什麼? – Arjan 2012-02-12 12:18:16

+0

這是一個簡單的例子!你可以使用一些空間,我使用'|'爲自己或鏈接之間的空間。 – bizzr3 2012-02-12 12:20:27

+0

這是一個很好的建議,但我想我會在其他解答之一中使用單獨的表格概念。 – Ryan 2012-02-12 12:31:25