1

我有一张contentcontent_image. 一个 . 文件可以有不同的图像content_id。根据image_size.

换句话说,我有一个内容,有 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填充值。如果我将 cfoutput 按 分组content_id,那么它确实会生成一个结果,但同样 - 只big定义了值:) 但我想要一个同时big定义了和small值的输出。

谢谢大家的帮助!

4

2 回答 2

2

在一个输出中只显示一个内容和 3 个不同的图像。

如果我理解正确,您正在尝试返回具有两种图像大小的单个记录。要获得该结果,您必须多次加入您的图像表:每个图像大小一次。

同样正如 Dan 上面提到的,如果您希望保留 OUTER JOIN 对这些表的任何过滤,必须JOIN's而不是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
于 2013-10-07T18:04:33.560 回答
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>
于 2013-10-07T16:36:13.857 回答