2013-10-07 73 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> 
相关问题