2012-12-17 76 views
0

我有兩個表,分類和信息。PHP/SQL不知道如何處理

類的樣子:

id | name 

信息樣子:

id | parent_id | name | url 

PARENT_ID從類別ID。

我有一個表格,其中用戶可以添加多個網址。有一個按鈕可以按下,以顯示更多的網址字段。如果有多個網址,則將url2,url3等添加到數據庫中。然後

信息會看起來像:

id | parent_id | name | url | url2 | url3 

這是一個合適的方法呢?

如果是這樣,如果信息是什麼樣的:

id | parent_id |name |url   |url2   |url3 
1 | 1   |One |http://cnn.com | 
2 | 1   |Two |http://msn.com |http://aol.com| 

當我認爲一個或兩個或W/E,我怎麼查詢得到他們的網址嗎?

我知道我可以做:

$mysqli->query("SELECT i.url FROM info AS i LEFT JOIN categories AS c ON i.parent_id = c.id"); 

但這取決於我把i.url,i.url2,i.url3,我將不得不爲每一個信息一個單獨的查詢。我想要它,所以PHP決定了多少和什麼i.url選擇。

所以它應該是:

$mysqli->query("SELECT (PHP determines what i.url to put here depending on what info page I'm viewing) FROM info AS i LEFT JOIN categories AS c ON i.parent_id = c.id"); 
+0

那是URL2,URL3場數字不變或無限? – itachi

回答

0

如果你走這條道路,你將有一大堆的空值列,並查詢,這是相當多的你所描述遇到的問題。

我會創建一個不同的表格(可能是url),它將infourl s進行映射。例如:

url_id | info_id | url 

這是它簡潔這裏解釋的重複屬性設計模式: http://www.tomjewett.com/dbdesign/dbdesign.php?page=phone.php

下面是關於如何查詢的例子:

SELECT i.*, url 
FROM info i JOIN urls u ON i.id = u.info_id 
+0

謝謝你的建議。 – markerpower

0

沒有,這裏的正確的解決方案是另一個表,或許叫「info_urls」,該車型一到多與信息到的URL。

這是一個「標準化」設計,並允許每個「信息」無限的網址,並且是很容易查詢:

SELECT name, GROUP_CONCAT(info_urls.url) as urls 
FROM info JOIN info_urls ON info.id = info_urls.info_id; 

列看起來就像這樣:

id 
info_id 
url 

該解決方案的模型,你不知道用戶會多少網址進入,你的RDBMS就是CRUD作出的現實,不:-)列(並且是用於查詢連接在一起非常好)

+0

謝謝你的建議。 – markerpower

相關問題