2012-12-17 47 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

相关问题