2013-02-15 111 views
0

我有2个表:“目录”和“按”是“按”子表和我有他们通过id_catalog相关(指向目录中的“id”)“新闻”。MySQL:关联和不关联表之间的差异

我设法在目录中一个字段(“名称”)像这样的“新闻”孩子的测试porpouses:

$query="SELECT catalog.book_title, press.* FROM catalog, press WHERE press.id_catalog = $id"; 

$book_title = mysql_result($result,$i,"_catalog.book_title"); 
$media_name = mysql_result($result,$i,"_press.media"); 
$type = mysql_result($result,$i,"_press.type"); 
$url = mysql_result($result,$i,"_press.url"); 

echo $book_title $media_name $type $url; 

$book_title = mysql_result($result,$i+1,"catalog.book_title"); 
$media_name = mysql_result($result,$i+1,"press.media"); 
$type = mysql_result($result,$i*+1*,"press.type"); 
$url = mysql_result($result,$i*+1*,"press.url"); 

echo $book_title $media_name $type $url; 

在查询中,$ id则是受的get_ [] 它通过返回期望的内容

下面是问题:如果我不在数据库中执行关系,该怎么办? (使用id_catalog上的INDEX) 查询是否可用?

我在回答这个问题,因为我认为如果我不做这个关系,我可以匹配这些字段并使它工作,不管怎么样?

+0

如果你上面的查询将返回你期望什么,这是偶然的。在查询本身中没有任何关系,并且在表定义中定义一个FOREIGN KEY不会导致查询中的键自动关联。 – 2013-02-15 23:11:11

+0

您的查询正在返回笛卡尔产品。真的,你需要做'从按联接目录ON press.id_catalog = catalog.id WHERE press.id_catalog = $ id' – 2013-02-15 23:12:22

回答

0

我不认为你的问题是与索引(虽然这将有助于提高性能)。我认为这个问题是这样的查询产生一个笛卡尔乘积 - 你是不是涉及2个表:

SELECT catalog.book_title, press.* 
FROM catalog, press WHERE press.id_catalog = $id 

相反,它应该是这样的:

SELECT catalog.book_title, press.* 
FROM catalog 
    JOIN press ON catalog.id = press.id_catalog 
WHERE press.id_catalog = $id 
+0

好了。所以我没有做任何关系,我正在努力工作,因为我有点像通过“查询技巧”来做关系,如果我可以......是对的吗? @sgeddes的“我的方式”和“正确的方式”之间的区别在于表演呢? 编辑:我做了关于phpmyadmin的表“按”,级联。 – noname 2013-02-15 23:26:11

+0

@noname - 您的目录表中有多少条记录。随着您的查询,该表中的每条记录都将被返回。在两个表格之间添加JOIN(关系)时,只会返回与搜索条件相对应的记录。希望这可以帮助。 – sgeddes 2013-02-15 23:34:16

+0

这样做可以提高大型数据库的性能! 现在我的问题很清楚 我非常感谢!我会给你的重点,但我不能因为我在这里新来的。 干杯! – noname 2013-02-15 23:41:34