2013-10-07 109 views
1

我有一個加入content_image的表格content。單個content_id可以有不同的圖像。根據image_size,我想加入他們的案件。在一個ID中加入兩個表格,在另一個表格中加入多個ID

換句話說,我有一個內容,有3種不同的圖像大小。但這些圖像位於另一個表格中,因此我只想顯示一個內容,並在一個輸出中顯示3個不同的圖像。

反正希望代碼將在我的解釋更加清晰:

SELECT C.CHAPTER_ID,CH.CHAPTER,C.CONTENT_ID, 
      C.CONT_HEAD AS NAME, 
      SMALL=(CASE WHEN CI.IMAGE_SIZE=0 THEN CONTIMAGE_SMALL END), 
      BIG=(CASE WHEN CI.IMAGE_SIZE=2 THEN CONTIMAGE_SMALL END), 
      C.UPDATE_DATE, 
      C.RECORD_DATE 
    FROM CONTENT C 
       LEFT OUTER JOIN CONTENT_CHAPTER CH ON C.CHAPTER_ID = CH.CHAPTER_ID 
       LEFT OUTER JOIN CONTENT_IMAGE CI ON CI.CONTENT_ID=C.CONTENT_ID 
    WHERE CH.CONTENTCAT_ID = 14 
    ORDER BY C.UPDATE_DATE DESC,C.RECORD_DATE DESC 

和輸出代碼:

<cfoutput query="get_images"> 
     <a class="highslide" target="_blank" onclick="return hs.expand(this, { slideshowGroup: 1 })" href="/documents/content/#big#"><img src="/documents/content/#small#" title="#name#" border="0" /></a> 
    </cfoutput> 

問題是這樣產生兩個輸出。在第一個中,只有big值被填充。在第二個中,只填充了small值。如果我通過content_id對cfoutput進行分組,那麼它確實會生成單個結果,但是又一次 - 只定義了big值:)但我想要定義一個單個輸出,同時定義了bigsmall兩個值。

謝謝大家的幫助!

+0

你能分享一些樣本內容和你期望的結果嗎? – AgRizzo

回答

2

僅顯示一個內容與一個輸出3個不同的圖像。

如果我的理解正確,您試圖返回一個單個記錄與兩個圖像大小。要達到該結果,您必須多次加入圖像表:每個圖像大小一次。

再次as Dan mentioned above,如果您希望保留OUTER JOIN是這些表必須JOIN的範圍內進行任何過濾,WHERE條款,否則你最終做一個隱含的INNER JOIN代替。

SELECT C.CHAPTER_ID 
     , CH.CHAPTER 
     , C.CONTENT_ID 
     , C.UPDATE_DATE 
     , C.RECORD_DATE 
     , C.CONT_HEAD AS NAME 
     , CIS.CONTIMAGE_SMALL AS SMALLImage 
     , CIB.CONTIMAGE_SMALL AS BIGImage 
FROM CONTENT C 
     LEFT OUTER JOIN CONTENT_CHAPTER CH 
      ON C.CHAPTER_ID = CH.CHAPTER_ID AND CH.CONTENTCAT_ID = 14 
     LEFT OUTER JOIN CONTENT_IMAGE CIS 
      ON CIS.CONTENT_ID = C.CONTENT_ID AND CIS.IMAGE_SIZE = 0 
     LEFT OUTER JOIN CONTENT_IMAGE CIB 
      ON CIB.CONTENT_ID = C.CONTENT_ID AND CIB.IMAGE_SIZE = 2 
ORDER BY C.UPDATE_DATE DESC,C.RECORD_DATE DESC 
+1

它確定,但有一點小錯誤:在選擇部分cib不是雙順:) :) –

+0

好抓。錯字固定。 – Leigh

1

讓我們先從這一點:

FROM CONTENT C 
LEFT OUTER JOIN CONTENT_CHAPTER CH ON C.CHAPTER_ID = CH.CHAPTER_ID 
LEFT OUTER JOIN CONTENT_IMAGE CI ON CI.CONTENT_ID=C.CONTENT_ID 
WHERE CH.CONTENTCAT_ID = 14 

它看起來不錯,但事實並非如此。當你在你的where子句中引用一個外連接表時,它實際上變成了一個內連接。解決方法是該過濾器移動到FROM子句,像這樣:

FROM CONTENT C 
LEFT OUTER JOIN CONTENT_CHAPTER CH ON C.CHAPTER_ID = CH.CHAPTER_ID 
and CH.CONTENTCAT_ID = 14 

LEFT OUTER JOIN CONTENT_IMAGE CI ON CI.CONTENT_ID=C.CONTENT_ID 

接下來,你可以使用CFOUTPUT標籤的組屬性來操縱你的記錄中顯示。對於上面的查詢,你會想要這樣的東西。

<cfoutput query="yourquery" group="content_id"> 
#content_id# 
<cfoutput> 
#big# #small# 
</cfoutput> 
</cfoutput> 
相關問題