[MySQL] Default taalkeuze regelen

Pagina: 1
Acties:

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Ik heb een multilanguage site, maar 't is de bedoeling dat wanneer een artikel niet bestaat, een default taal (in dit geval Engels) voor dat artikel gekozen wordt.

Dit wil echter niet erg lukken.

Normaal gesproken gebruik ik de volgende query:

SQL:
1
2
3
4
5
6
7
SELECT * FROM mcdronkz_pages
INNER JOIN mcdronkz_pages_trans ON ptPage = pID
INNER JOIN mcdronkz_languages ON laID = ptLanguage
WHERE
    laLanguage = 'nl'
AND
    pName = 'hiscar'


Stel dat "hiscar" niet in het Nederlands aanwezig is, dan wil ik de Engelse selecteren. Als de Nederlandse wel aanwezig is wil ik gewoon de Nederlandse tonen.

Ik dacht, dan doen we dit:

SQL:
1
2
3
4
5
6
7
SELECT * FROM mcdronkz_pages
INNER JOIN mcdronkz_pages_trans ON ptPage = pID
INNER JOIN mcdronkz_languages ON laID = ptLanguage
WHERE
    (laLanguage = 'nl' OR laLanguage = 'en')
AND
    pName = 'hiscar'


Maar dan krijg ik geen resultaat, en bij andere pagina's waar beide talen aanwezig zijn selecteert 'ie ze met beide talen. Not good.

Hoe krijg ik hier nou grip op ?

Verwijderd

De tweede optie kiezen, en dan ORDER BY laLanguage = 'nl' LIMIT 0, 1

  • ATS
  • Registratie: September 2001
  • Laatst online: 29-10 18:37

ATS

Sorteren op taalvoorkeur lijkt me een optie. Vervolgens return je alleen het eerste resultaat per artikel/pagina.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • DaRKie
  • Registratie: December 2001
  • Laatst online: 17-11 10:19
Zijn probleem is dat zijn 2de query niets teruggeeft als slechts 1 van de 2 talen aanwezig is. Zodra er 1 ontbreekt, geef die query niets terug. Dus order by toevoegen gaat niets oplossen.

Kan je eens de structuur van de 3 tabellen posten? Denk persoonlijk dat het te maken gaat hebben met de joins.

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Mja, ik zit met meerdere records per pagina, maar dit lijkt me inderdaad wel een geschikte oplossing.
DaRKie schreef op zondag 25 mei 2008 @ 18:42:
Zijn probleem is dat zijn 2de query niets teruggeeft als slechts 1 van de 2 talen aanwezig is. Zodra er 1 ontbreekt, geef die query niets terug. Dus order by toevoegen gaat niets oplossen.

Kan je eens de structuur van de 3 tabellen posten? Denk persoonlijk dat het te maken gaat hebben met de joins.
Hmm ja, raar, ik krijg nu wel degelijk iets terug. In 't Engels. Mijn fout denk ik.

[ Voor 63% gewijzigd door mcdronkz op 25-05-2008 18:44 ]


  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 18-11 16:18

Tukk

De α-man met het ẞ-brein

Waarom de SQL niet KISS houden en in de programmeertaal een simpele IF-THEN-ELSE structuur?

Dat zou mijn stijl zijn, de code blijft overzichtelijk en je haalt niet meer uit de DB dan nodig.

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Tukk schreef op zondag 25 mei 2008 @ 18:45:
Waarom de SQL niet KISS houden en in de programmeertaal een simpele IF-THEN-ELSE structuur?

Dat zou mijn stijl zijn, de code blijft overzichtelijk en je haalt niet meer uit de DB dan nodig.
Klopt. En bovendien, ik moet nu aflopend sorteren, stel dat ik de Duitse taal wil toevoegen dan kom ik in de problemen omdat 'ie dan de Engelse taal als eerste ziet en er dus alleen maar Engelse items weergegeven zullen worden ipv Duitse.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dan heb je de order by in Cheatahs query niet bekeken. :>

{signature}


  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Voutloos schreef op zondag 25 mei 2008 @ 19:47:
Dan heb je de order by in Cheatahs query niet bekeken. :>
Klopt :X

Maargoed, 't moest dus ORDER BY laLanguage = 'en' zijn, dan zou 'ie elke taal goed moeten pakken. Werkt hier in elk geval top nu.
Pagina: 1