2010-03-30 113 views
0

我创建了一个简单的新闻网站。我将这两个视频和图像存储在IMAGES表中。添加的视频添加了视频和图像,图像存储在名为ImagesType的列中。附加到新闻的图像和视频存储在NEWS表的ImagesID列中。我需要显示新闻的第一张图片时发生问题。跳过列中的一个项目


IMAGES表:

ImagesID ImagesLgURL      ImagesType 
1  /FLPM/media/videos/0H7T9C0F.flv videos  
2  /FLPM/media/images/8R5D7M8O.jpg images 
3  /FLPM/media/images/0E7Q9Z0C.jpg images 

NEWS table 
NewsID ImagesID NewsTitle 
1  1;2;  Street Chic: Paris   ERROR  
2  3;  Paris Runway     NO ERROR 

下面的代码给我第二次新闻项目错误,因为存储在列表中的第一个图像标识不是一个图像,而是视频。我需要找出一种方法来跳过视频项目并显示下一张图片。

我希望我有道理。

SQL = "SELECT NEWSID, CATEGORIESID, IMAGESID, NEWSTITLE, NEWSSHORTDESC, NEWSACTIVE, NEWSDATEENTERED" 
SQL = SQL & " FROM NEWS N" 
SQL = SQL & " WHERE NEWSACTIVE = 1" 
SQL = SQL & " ORDER BY NEWSDATEENTERED DESC" 
Set objNews = objConn.Execute(SQL) 

Do While intLooper1 <= 3 And Not objNews.EOF 

IMAGES = Split(Left(objNews("IMAGESID"),Len(objNews("IMAGESID"))-1), ";") 

SQL = "SELECT ImagesID, ImagesName, ImagesLgURL, ImagesSmURL, ImagesType" 
SQL = SQL & " FROM IMAGES I" 
SQL = SQL & " WHERE ImagesID = " & IMAGES(0) & " AND ImagesType = 'images'" 
Set objLgImage = objConn.Execute(SQL) 

<div> 
<a href="?Section=news&SubSection=redirect&NEWSID=<%=objNews("NEWSID")%>"> 
<img src="<%=objLgImage("ImagesLgURL")%>" alt="<%=objLgImage("ImagesName")%>" /> 
</a> 
</div> 
<% 
    objLgImage.Close 
    Set objLgImage = Nothing 

    intLooper1 = intLooper1 + 1 
    objNews.MoveNext 
    Loop 
%> 

回答

1

你应该有NewSID的图像中的表和把ForeingKey它

**NEWS table** 
NewsID NewsTitle 
---------------------------- 
1  Street Chic: Paris    
2  Paris Runway  

**Images table** 
ImageID (PK) NewsID (FK) ImagesLgURL      ImagesType 
------------------------------------------------------------------------- 
1    1   /FLPM/media/videos/0H7T9C0F.flv videos  
2    1   /FLPM/media/images/8R5D7M8O.jpg images 
3    2   /FLPM/media/images/0E7Q9Z0C.jpg images 

然后你就可以很容易地选择的每条新闻的第一张照片

SQL = "SELECT NEWSID, CATEGORIESID, NEWSTITLE, NEWSSHORTDESC, NEWSACTIVE,"  
SQL = SQL & " NEWSDATEENTERED," 
SQL = SQL & " (SELECT TOP 1 ImageID from Images where Images.NewsID = N.NewsID 
       AND Images.ImageType = 'Images') as ImageID" 
SQL = SQL & " FROM NEWS N" 
SQL = SQL & " WHERE NEWSACTIVE = 1" 
SQL = SQL & " ORDER BY NEWSDATEENTERED DESC" 
Set objNews = objConn.Execute(SQL) 
0

你真的应该有一个视频表和一个图片表。这将是一个更好的设计,它将以更简洁的解决方案解决您的问题。

+1

也许吧,但如果许多的这两种类型的列是相同的,所以最好将表格简单地重命名为“媒体”。 – NobodyMan 2010-03-30 19:49:51