Avatar billede lund_dk Praktikant
02. april 2012 - 12:11 Der er 9 kommentarer

SQL - hjælp til default

Hej

Jeg er ved at lave et multi sproget website, og skal have lidt hjælpe til hvordan jeg griber min kode an.


Min database:

KATEGORI
CATID -

KATEGORI_SPROG
CATID - KATEGORI_NAVN - LAND


<%
Set rsCat= Conn.Execute("SELECT * from KATEGORI")
Do While Not rsCat.EOF
%>

osv.

Mit problem er så, at jeg skal have kategorinavnet fra det valgte sprog. Lad os bare sige jeg har DK og EN

Er sproget så sat til DK, og der IKKE findes et kategorinavn på DK, skal jeg i stedet udskrive kategorinavnet på EN som ALTID er oprettet.

Hvordan fixer jeg det?

jeg ville normalt bruge INNER JOIN, men hvordan angiver jeg den skal bruge EN hvis ikke eks DK findes?
Avatar billede lund_dk Praktikant
02. april 2012 - 12:27 #1
Her er min sætning nu, som virker fint.

Problemet er jo så bare, hvis man har valgt et sprog, hvor der ikke er lavet tekst til, så vises der ingenting. Og er der ingenting, skal den engelske (en) vises i stedet.

SELECT * from sinox_productcat INNER JOIN sinox_productcat_phrase ON sinox_productcat.catid = sinox_productcat.catid where sinox_productcat.active = 1 and sinox_productcat_phrase.langcode = '" & strLC & "'
Avatar billede lund_dk Praktikant
02. april 2012 - 13:03 #2
Min løsning er lige nu - men tænkte det kunne gøres pænere?


Set rsCat= Conn.Execute("SELECT * from sinox_productcat where active = 1 and level = 0 ")
                        Do While Not rsCat.EOF
                            Set rsCatPhrase= Conn.Execute("SELECT * from sinox_productcat_phrase where catid = " & rsCat("catid")  & " AND langcode = '" & strLC & "'")
                            if rsCatPhrase.eof or rsCatPhrase.bof then
                                Set rsCatPhrase= Conn.Execute("SELECT * from sinox_productcat_phrase where catid = " & rsCat("catid")  & " AND langcode = '" & strLCS & "'")
                            else
                            end if
                            strTitle = rsCatPhrase("cat_title")
                            rsCatPhrase.close
                            set rsCatPhrase = nothing
Avatar billede mireigi Novice
03. april 2012 - 00:56 #3
Underline = Primary Key
Italic = Foreign Key


tblCategory
CategoryID

tblLanguage
Language, IsDefault

tblCategory_Language
Language, CategoryID, Name


SELECT    TOP (1) lang.Name
FROM        tblCategory_Language AS lang INNER JOIN
                      tblLanguage ON lang.Language = tblLanguage.Language
WHERE    (lang.Language = 'DK') OR
                      (tblLanguage.IsDefault = 1)
ORDER BY tblLanguage.IsDefault
Avatar billede cpufan Juniormester
07. april 2012 - 20:06 #4
du kan bruge din nuværende og bygge lidt på:

SELECT * from sinox_productcat INNER JOIN sinox_productcat_phrase ON sinox_productcat.catid = sinox_productcat.catid where sinox_productcat.active = 1 and sinox_productcat_phrase.langcode IN ( '" & strLC & "','EN')
Avatar billede lund_dk Praktikant
16. april 2012 - 11:09 #5
Undskyld det sene svar, en indlæggelse kom lige i vejen :)

cpufan: har forsøgt din løsning, men der er ét problem.

den udskriver 2x hver post for hvert sprog.

Dvs. har jeg én engelsk post, udskrives denne 2 gang. Har jeg så også en dk post, udskrives denne også 2 gange. Altså 4 gange i alt.
Avatar billede lund_dk Praktikant
16. april 2012 - 11:11 #6
Undskyld, jeg lavede en bette fejl i min SQL, det virker jo.. tusind tak :)
Avatar billede lund_dk Praktikant
16. april 2012 - 11:12 #7
Og så ikke alligevel. Hehe.

Har jeg en en og en da oversættelse vises de begge, og ikke kun den ene fra det valgte sprog
Avatar billede cpufan Juniormester
16. april 2012 - 12:24 #8
det er så fordi du bruger et do .. loop i din udskriv-funktion

hvordan ser hele din udtræk-kode ud?
specielt den del hvor du udskriver resultat?

Den skal nok bare hedde:
if not rs.eof then resultat = rs(0)
response.write resultat

hvor rs(0) jo er din oversættelse f.eks rs("col_name")
Avatar billede mireigi Novice
17. april 2012 - 18:34 #9
Den jeg har givet giver dig kun ét resultat tilbage og Default Sprog hentes automatisk fra databasen i stedet for at du skal sende det med som parameter.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester