2013-02-15 109 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