2011-10-19 142 views
0

我有2個表(mysql),一個用於產品名稱和其他產品圖像。SQL查詢加入兩個表

tblproducts - >編號(INT,PK),名稱(VARCHAR)

tblphotos ---> ID(INT,PK),產品ID(INT,FK),照片,爲了

in tblphotos訂單字段是照片的顯示順序(1,2,3 ...)

每個產品可以有超過1張照片。我所需要的產品的第一張照片(順序= 1)

我需要的是tblproducts.id,tblproducts.name,tblphotos.photo(照片必須是一個與順序1)

我寫下面的查詢,但我的產品名稱是重複

SELECT tblproducts.id,tblproducts.name, tblphotos.photo 
    FROM tblproducts 
LEFT JOIN tblphotos on tblphotos.productid = tblproducts.id 

一件事::我要以升序排序

+1

您忘記使用where子句?即; 'tblphotos.order = 1' – Prasanth

回答

-1

我認爲這會爲你

SELECT tblproducts.id, tblproducts.name, tblphotos.photo 
FROM tblproducts 
LEFT JOIN tblphotos on tblphotos.productid = tblproducts.id 
    and tblphotos.order=1; 
01的工作秩序
+1

我相信''和'必須和'where'一起。 '和'只適用於'tblphotos'。這意味着來自'tblproducts'的所有**行將仍然存在,並且如果由於'end'而在'tblphotos'中丟失了一個匹配項,則將被空值替換。 – Melsi

+0

@Melsi:是的,我認爲你是對的,所有來自tblproducts的數據都會被結果...我們也可以用JOIN替換LEFT JOIN,那麼它應該是正確的。 –

3

如果你只是想的第一張照片(其中帶有順序= 1),那麼你需要指定在查詢:

SELECT 
    PR.id AS product_id, 
    PR.name, 
    PH.photo 
FROM 
    Products PR 
LEFT OUTER JOIN Photos PH ON 
    PH.product_id = PR.id AND 
    PH.`order` = 1 

由於order可能是一個保留字,我一直在封閉它MySQL的默認引用標識符。儘管如此,你會更好地使用不同的列名稱。另外,我不能讓自己在表名前寫上一個帶有「tbl」的查詢。

+0

@JohnK,必須同意TomH,你應該遠離你的列名中的保留字 - 它只會導致你的問題,也沒有必要用tbl前綴表名。仍然在標準點上,表名通常應該是單數,即產品和照片而不是複數,但這只是一個小問題。 –

+0

+1。 @JohnK:'SortOrder'是Order的一個很好的選擇。另一個是「排序」。 –

0

試試這個:

SELECT tblproducts.id,tblproducts.name, tblphotos.photo 
FROM tblproducts LEFT JOIN tblphotos on tblphotos.productid = tblproducts.id 
and tblphotos.order=1