在一个中连接两个表,在另一个表中有一个id和多个id

时间:2013-10-07 15:37:40

标签: mysql coldfusion

我有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值:)但是我想要一个单个输出已定义bigbig个值。

谢谢大家的帮助!

2 个答案:

答案 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>