2009-01-29 229 views
0

我有一個名爲PROJECT_CATEGORY表,它包含兩個字段要使用哪種類型的連接?

CAT_ID和cat_title

我存儲在另一個表稱爲項目,使該CAT_ID:

project_category.cat_id = projects.cat_id 

什麼是使用MySQL的最好方式運行查詢以顯示cat_title。換句話說,我想顯示的名稱不是表的ID號。將這項工作:

SELECT * FROM projects INNER JOIN projects ON project_category.cat_id = projects.cat_id 

然後調用它:

'.$row['cat_title'].' 

有什麼想法?

回答

1

如果項目有一個有效的cat_id和cat_id是唯一的,比INNER JOIN是好的。

如果任何項目有一個NULL cat_id,則需要一個LEFT JOIN。

如果cat_id不是唯一字段(主鍵),您可能希望使用子查詢將自己限制爲每個項目的一個結果。

+0

是...每個項目都會擁有某種類型的分類。 – Coughlin 2009-01-29 22:31:58

0
SELECT 
    projects.cat_id cat_id 
FROM 
    projects INNER JOIN 
    project_category ON project_category.cat_id = projects.cat_id 
0
SELECT cat_title 
FROM projects 
    INNER JOIN project_category ON project_category.cat_id = projects.cat_id 

這應該工作。

+0

爲了顯示cat_title,我可以使用: '。$ row ['cat_title']。' 我試過並得到一個空白輸出,沒有錯誤 – Coughlin 2009-01-29 22:34:03

+0

在像phpMyAdmin這樣的查詢分析器中運行查詢,看看你是否得到任何結果。如果沒有,你可能沒有任何數據出於某種原因,否則你可能會錯誤地在php中讀取字段。 – 2009-01-30 01:00:53

1

儘量不要使用SELECT *,而應選擇您需要的特定字段。另外,如果您在查詢中使用多個表,請將它們別名,以便根據需要提取值,而不會遇到歧義問題。

不管怎麼說,你可以嘗試這樣的:

SELECT  
project_category.cat_title 
,projects.* 
FROM 
projects 
    LEFT OUTER JOIN  
    project_category 
    ON project_category.cat_id = projects.cat_id 
0

你的加入看起來不錯。 FWIW,在這種情況下,我會使用USING條款。它的工作原理是相同的,但它是一個有點更清晰簡潔:

SELECT * FROM projects INNER JOIN project_category USING (cat_id); 

如果您無法在您的$row關聯數組找到列,我會檢查你列定義的拼寫,包括大小寫。如果你申報表是這樣的:

CREATE TABLE `Project_Category` (
    `Cat_ID` INTEGER NOT NULL, 
    `Cat_Title` VARCHAR(20) NOT NULL 
); 

那麼結果集可以使用數組鍵是文字的拼寫和大小寫。 PHP數組鍵區分大小寫。

print $row['Cat_Title']; 

你或許應該轉儲$row陣列,看看它認爲它的關鍵是:

print_r($row); 
0

您可以使用NATURAL JOIN

SELECT CAT_TITLE 
FROM projects 
NATURAL JOIN project_category 

如果colunms是同一類型和不是null,不需要將字段放在連接中,它會正常工作。