Hejhej, Hej! Det känns som lösningen borde vara helt ok när tre olika personer skriver exakt samma lösning helt oberoende av varandra :-) Jepp, tror det ska fungera. Min lösning skiljer sig bara på det sättet att man inte skilt i koden behöver kontrollera om det är default eller översatt man ska använda sig av, annars är det exakt samma. mycket snyggt.sql vid flera språk
jag har en tabell med attribut till vilken hör en tabell för översättningar på olika språk enligt:
attribute
---------
attributeid
namedefault
descriptiondefault
attribute_locale
-----------------
attributeid
languageid
name
description
När jag kör en sql som ska välja ut alla attribute och använda t.ex. norska som språk så vill jag i de fall norsk översättning inte är med få ut namedefault och descriptiondefault istället.
Om jag kör:
select a.*, al.name from attribute a left join attribute_locale al on al.attributeid = a.attributeid where a.attributeid = 1 and al.languageid = 2
så gör ju where att jag bara får med de rader som har översättningar och inga andra.
Om jag kör inre sql satser:
select a.*, (select al.name from attribute_locale where al.attributeid = a.attributeid and al.languageid = 1) AS name, (select al.description from attribute_locale where al.attributeid = a.attributeid and al.languageid = 1) AS description from attribute a where a.attributeid = 1
så får jag ut mitt resultat men det känns onödigt att köra två subqueries...
hur kan man lösa detta smartare?
/stefanSv: sql vid flera språk
Detta borde väl fungera...
select a.*, al.name, al.description
from attribute a
left outer join attribute_locale al on al.attributeid = a.attributeid and al.languageid = 1
where a.attributeid = 1
/SvalanSv:sql vid flera språk
SELECT IFNULL(al.name, a.namedefault) name, IFNULL(al.description, a.descriptiondefault) description FROM attribute a
LEFT JOIN attribute_locale al ON al.attributeid = a.attributeid AND al.languageid = 1
WHERE a.attributeid = 1
Sv: sql vid flera språk
SELECT a.*, al.name, al.description
FROM attribute AS a
LEFT OUTER JOIN attribute_locale AS al ON (a.attributeid = al.attributeid AND al.languageid = 1)
Såg nu att det var samma som thomas. ;-)
Sv: sql vid flera språk
/SvalanSv:sql vid flera språk
Sv: sql vid flera språk
jag har nu raderat en massa rader onödig kod.
tack alla!
/stefan