webForumDet fria alternativet

Språkjoin bästa sätt?

1 svar · 420 visningar · startad av crisse6

crisse6Medlem sedan dec. 20002 526 inlägg
#1

Hello,

Sitter och funderar på smidigaste/snabbaste sättet är att hämta ut lite copy tillhörande en db-post och på ett visst språk.

Har fyra tabeller:

tbl_objects:
- id (int, pk, ai)
- data (varchar)

tbl_copy
- id (int, pk, ai)
- text (text)

tbl_copy_map
- id (int, pk, ai)
- copyID (int)
- objectID (int)
- langID (int)

tbl_lang
- id (int, pk, ai)
- primary (int)
- langCode (varchar)

Jag vill ställa frågan; ge mig objekt med id X och dess copy på språk "XX". Finns inte copy för efterfrågat språk så ge mig objektet men med copy på språket som är markerat med 1 i "primary"-kolumnen i tbl_lang (kommer alltid finnas ett defaultspråk alltså).

Finns översättning på objekt inom efterfrågat språk så är variabeln "translated" = true, annars false så man vet när det ska loopas.

Några förslag? SELECT inom SELECT för att få "translated"? SELECT inom WHERE för att kolla om det inte är NULL på efterfrågat språk? Eller kanske en IF-sats?

crisse6Medlem sedan dec. 20002 526 inlägg
#2

Har satt ihop denna, men kanske inte är "optimal"? Går att göra på bättre sätt?

$sql = "SELECT IF((SELECT id FROM tbl_lang WHERE id = $lang), 'true', 'false'), C.text FROM tbl_copy C";
$sql.= " INNER JOIN tbl_copy_map CM ON CM.copyID = C.id";
$sql.= " INNER JOIN tbl_objects O ON O.id = CM.objectID";
			
$sql .= " WHERE O.id = $objID";
$sql .= " AND CM.langID = IFNULL((SELECT id FROM tbl_lang WHERE id = $lang), $this->PRIMARY_LANGUAGE)";
126 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)