Det är så att jag har en nyhets DB med nyheter på 5 olika språk. Ja
g har 2 tabeller, en som heter News och en som heter NewsContent
Först ska jag skriva ut alla nyheter som finns på engelska och är det=
någon nyhet som inte finns på engelska men på tex svenska så ska d=
en komma under alla de engelska nyheterna
Typ så här
News that exists in English
Loopa igenom alla nyheter som finns på engelska
News that exists in Swedish
Loopa igenom alla nyheter som finns på svenska men inte på engelska
Sedan vidare och gör samma sak om det finns några nyheter som inte finns på engelska eller tidigare loopat språk
Om du lägger till en kolumn, sortOrder i languagetabellen som anger i vilken ordning man skall välja språk så kan man skriva en fråga enligt följande
select news,sortOrder
from news n inner join newsContent nc on nc.id = n.id
inner join language l on nc.lang = l.lang
where nc.id not in (select id from newsContent
where lang < nc.lang) order by sortOrder
------------------ essentitia preter non sans multiplicandum
Hur menar du då ? i den tabellen finns ju flera av samma artiklar fast på olika språk, blir inte det väldigt mycket dubbel information, inte vidare normaliserat..
------------------
1 Man, 1 Million dead, The odds are just about even - Ash
SQLStmt = "select news,sortOrder "_
& "from news n inner join newsContent nc on nc.id = n.id inner join language l on nc.lang = l.lang"_
& " where nc.id not in (select id from newsContent where lang < nc.lang) order by sortOrder"
SELECT News.NewsId, NewsContent.NewsId, NewsContent.NewsLanguageid, NewsContent.NewsHeader, SortOrder.NewsLanguageId, SortOrder.Language, SortOrder.Sortorder FROM SortOrder INNER JOIN (News INNER JOIN NewsContent ON News.NewsId = NewsContent.NewsId) ON SortOrder.NewsLanguageId = NewsContent.NewsLanguageid WHERE NewsContent.NewsId NOT IN (SELECT NewsId FROM NewsContent WHERE NewsId < Newscontent.LanguageId) ORDER BY SortOrder
är jag helt ute åp cyklar
------------------
1 Man, 1 Million dead, The odds are just about even - Ash
Access är lite besvärligt när man skriver joins. Det brukar behövas lite parenteser
select news,sortOrder
from (news n inner join newsContent nc on nc.newsId = n.newsId)
inner join sortOrder l on nc.newsLanguageId = l.newsLanguageId
where nc.newsId not in (select newsId from newsContent
where newsLanguageId in (select newsLanguageid from sortOrder
where sortOrder < l.sortOrder )) order by sortOrder
Jag gjorde en miss i min förra fråga. Den fugerade bara om om newsLanguageId kom i samma ordning som sortOrder. Jag skrev om frågan så nu skall det enbart bero på sortOrder.
red: glömde order by
------------------ essentitia preter non sans multiplicandum
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
/webtools/News.asp, line 137
Men hittar inget som är fel
när jag skriver ut sqlstmt:en får jag
SELECT News, SortOrder FROM (news n inner join newsContent nc on nc.newsId = n.newsId)inner join sortOrder l on nc.newsLanguageId = l.newsLanguageId WHERE nc.newsId not in (SELECT newsId from newsContent WHERE newsLanguageId in (SELECT newsLanguageid from sortOrder WHERE sortOrder < l.sortOrder )) ORDER BY sortOrder
Måntro vad kan va fel ?
------------------
1 Man, 1 Million dead, The odds are just about even - Ash
Jo det är det jag har letat efter. Men kan lixom inte bara hitta det. Inget är väll reserverat, news eller sortorder kanske men inte så vitt jag vet.
Ser inte något konstigt med denna
SQLStmt = "SELECT News, Sortorder FROM (News n INNER JOIN NewsContent nc on nc.NewsId = n.NewsId) INNER JOIN Sortorder l ON nc.NewsLanguageid = l.NewsLanguageId WHERE nc.NewsId NOT IN (SELECT NewsId FROM NewsContent WHERE NewsLanguageid IN (SELECT NewsLanguageId FROM Sortorder WHERE Sortorder < l.Sortorder)) ORDER BY Sortorder"
------------------
1 Man, 1 Million dead, The odds are just about even - Ash
select news,sortOrder
from (news n inner join newsContent nc on nc.newsId = n.newsId)
inner join sortOrder l on nc.newsLanguageId = l.newsLanguageId
where nc.newsId not in (select newsId from newsContent
where newsLanguageId in (select newsLanguageid from sortOrder
where sortOrder < l.sortOrder )) order by sortOrder
vad betyder SELECT news,sortOrder
from När News och SortOrder är namnet på 2 tabeller i DB:n.
Skriver jag
select *
from (news n inner join newsContent nc on nc.newsId = n.newsId)
inner join sortOrder l on nc.newsLanguageId = l.newsLanguageId
where nc.newsId not in (select newsId from newsContent
where newsLanguageId in (select newsLanguageid from sortOrder
where sortOrder < l.sortOrder )) order by sortOrder
så får jag fram något, men vad exakt är det jag får fram ?
tacksam
/erka
------------------
1 Man, 1 Million dead, The odds are just about even - Ash
Nu får jag ju ut rätt genom att ta * istället för skriva som du larsG, men hur kan jag göra så jag skriver ut Först namnet på språket en gång sedan loopar jag
sedan namnen på nästa språk i sortorder listan och loopa där..
om du orkar..
/erka
------------------
1 Man, 1 Million dead, The odds are just about even - Ash
Om du bara vill skriva ut språk en gång, så får du själv i din VB-kod hålla reda på när man byter språk.
language = ""
sql = "..."
set rs = connect.execute(sql)
while not rs.eof
if Cstr(language) <> Cstr(rs("language") then
language = rs("language")
response.write language & "<br>"
end if
'skriv övrigt data
rs.movenext
wend
------------------ essentitia preter non sans multiplicandum
Det är att jag anväder mig av getrows..Jag har sökt lite men inte lyckats förstå hur jag ska göra liknande som while not rs.eof med den koden jag använder nu
SQLStmt = "SELECT * FROM (News n INNER JOIN NewsContent nc on nc.NewsId = n.NewsId) "_
& "INNER JOIN SortOrder l ON nc.NewsLanguageid = l.NewsLanguageId WHERE nc.NewsId "_
& "NOT IN (SELECT NewsId FROM NewsContent WHERE NewsLanguageid IN "_
& "(SELECT NewsLanguageId FROM SortOrder WHERE Sortorder < l.Sortorder)) ORDER BY SortOrder"
Response.Write"<br>"
SET RS = Connect.Execute(SQLStmt)
Dim ArrRS, a, i, Number , rs2, ArrRs2, CountryRep
ArrRS = RS.GetRows()
RS.Close
Set RS = Nothing
For i = 0 to ubound(ArrRS,2)
Number = ArrRS(0, i)
CountryRep = ArrRS(5, i)
SQLStmt2 = "SELECT * FROM NewsContent WHERE NewsID = "& Number &""
SET RS2 = Connect.Execute(SQLStmt2)
ArrRS2 = RS2.GetRows()
RS2.Close
Set RS2 = Nothing
Response.Write ArrRS(6, i) &" (published: "& ArrRS(2, i) &")<br>"
Response.Write"Existing languages: "
For a = 0 to ubound(ArrRS2,2)
Response.Write"<img src=""/bin/images/flags/"& ArrRS2(1, a) &".gif"">"_
&"<img src=""/bin/images/flags/1x1vit.gif"">"
Next
Response.Write"<br><a href=""view.asp?documentID=News&catID=wt&Action=AddStep1&NewsID="& ArrRS(0, i) &""_
& """>Add new language version</a><br><br>"
Next
Vet du det också kanske ;) tackar i alla fall för hjälpen
------------------
1 Man, 1 Million dead, The odds are just about even - Ash
fattar ju att jag måste sätta ett värde som sätts på 0 vid varje nytt land som kollas igenom. Sedan öka den med ett för varje nyhetsid jag går igenom. Och kolla av den i varje loop så att säga. Men hur fean skriver man det, det är frågan
------------------
1 Man, 1 Million dead, The odds are just about even - Ash
274 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25