Jag har stött på ett litet problem kan man säga. Jag har gjort ett litet nyhetssystem där man först listar nyheter som inte har NewsRemoveDate mindre än dagens datum. Man kan alltså sätta en nyhet att den ska förpassas till arkivet.
Först listar jag de nyhter som inte finns i arkivet, utan fortfarande är aktuella. Under det listar jag de månader och år som har nyheter i arkivet. Jag har också flera språk versioner som jag tar ut med en var. LanguageId. Låt oss säga "eng" som ett exempel. Först listar jag ut de nyheter som är aktuella och har RemoveDate större än dagens datum. Under detta ska jag lista de övriga nyhter som finns på engelska men är förpassade till arkivet.
nu ser koden för detta ut på följande sätt
<%
Dim strYear, strSQL
strSQL = "SELECT DISTINCT year(NewsInsertDate) as y,month(NewsInsertDate) as m from NewsHeaders WHERE NewsRemovedate <= '"& date &"' order by 1 desc,2 asc "
Set rs = cn.execute(strSQL)
strYear = 4444
While NOT Rs.Eof
If RS("Y") < strYear Then
Response.write"<br><b>"& Rs("y")&"</b>"
End If
strYear = Rs("y")
Response.Write" <a href=""ShowNewsArchive.asp?Month="& RS("m") &"&Year="& RS("y") &""">"
Response.write monthname(rs("m"),true)
Response.Write"</a>"
Response.Write" | "
rs.movenext
wend
cn.close
set cn = Nothing
%>
Låt oss nu säga att det finns en månad som bara har spanska nyheter i arkivet, den kommer med i denna listningen också. Det ska den inte göra, bara de månader som har en nyhet med NewsLanguageId = "eng". Alltså måste jag göra en select satts innuti selectsattsen. Men hur ser en sån ut i detta fallet?
Nyheterna ligger inte i samma tabell utan i en tabell som heter NewsContent där en kolumn heter LanguageId och kan ha värdena eng,se,de,it.
Någon som är klokare ?
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
Är helt ute och snurrar går det inte att göra något typ det här, har sökt på subselects men inte blivit mycket klokare när det inte gäller att få fram värden som finns i den första tabellen.
strSQL = "SELECT DISTINCT year(NewsInsertDate) as y,month(NewsInsertDate) as m from NewsHeaders WHERE NewsRemovedate <= '"& date &"' "_
&" AND (SELECT * FROM NewsContent Where NewsLanguageID = "& LanguageId &"') order by 1 desc,2 asc "
Ett annat alternativ är ju att först plocka ut alla id ifrån NewsContent som har LanguageId ="eng" och sedan bygga någon dynamisk loop inuti select sattsen ovan, men det verkar för krångligt, borde gå att göra något enklare..
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
har kommit på hur jag ska göra nu, men jag måste få ut NewsId i denna sql satts
strSQL = "SELECT DISTINCT year(NewsInsertDate) as y,month(NewsInsertDate) as m from NewsHeaders WHERE NewsRemovedate <= '"& date &"' "_
&" ORDER by 1 desc,2 asc"
Kolumnen heter NewsId och om jag lägger till den i sattsen blir den inte distinct tror jag, iaf. får jag ut flera av samma månad etc.
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
Jag missförstår säkert helt och fast. Hur är tabellerna NewsHeaders och NewsContent relaterade? Om det är via newsid så borde det väl kunna se ut så här
strSQL = "SELECT DISTINCT year(NewsInsertDate) as y,month(NewsInsertDate) as m from NewsHeaders WHERE NewsRemovedate <= '"& date &"' "_
&" AND newsid in (SELECT newsid FROM NewsContent Where NewsLanguageID = "& LanguageId &"') order by 1 desc,2 asc "
------------------ essentitia preter non sans multiplicandum
Innerligt tacksam som vanligt, det var så att jag hade missförstått hela saken med sub selects tror jag. Jag hade fått för mig att man var tvungen att ta med det man jämför med/kollar efter i subselecten i första selecten. Dags att gå igenom subselect delen ordentligt till 1000 i min sql bok :) Något förvånad blev jag när SQL Server 2000 Blac Book knappast tog upp subselects över huvudtaget..
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
257 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9