我有content
加入的content_image
表格。单个content_id
可以有不同的图像。根据{{1}},我想加入案例。
换句话说,我有一个内容,有3种不同的图像尺寸。但是这些图像在另一个表中,所以我想只显示一个内容,在一个输出中有3个不同的图像。
无论如何希望代码在我的解释中更清楚:
image_size
和输出代码:
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
对cfoutput进行分组,那么它确实生成了一个结果,但是再次 - 只定义了content_id
值:)但是我想要一个单个输出已定义big
和big
个值。
谢谢大家的帮助!
答案 0 :(得分: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 :(得分: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标记的group属性来操作记录集的显示。对于上面的查询,你会想要这样的东西。
<cfoutput query="yourquery" group="content_id">
#content_id#
<cfoutput>
#big# #small#
</cfoutput>
</cfoutput>