0

私は多言語サイトを持っており、これを使用してユーザーが使用する言語を取得しています:

$languagestring = array();
$res1 = "SELECT id, text FROM ".$prefix."_language WHERE lang = 'en' ORDER BY id ASC";
if($result1 = $mysqli->query($res1)){ 
    while($row1 = $result1->fetch_object()){
        $langid = $row1->id;

        $res = "SELECT text FROM ".$prefix."_language WHERE fk_id = $langid AND lang = '$language'";
        if($result = $mysqli->query($res)){ 
            $row = $result->fetch_object();
            if(!$row){
                $languagestring[] = $row1->text;
            } else {
                $str = $row->text;
                $languagestring[] = $str;
            }
        }
    }
}

このスクリプトでは、最初にデフォルトの英語を取得し、次にユーザーが好む言語に英語と一致する文字列があるかどうかを確認します。これは魅力のように機能しますが、実行時間が長くなります。これら 2 つのクエリを 1 つに結合することは可能ですか。

前もって感謝します ;-)

######## 編集

運がないのでこれを試しました:

$res1 = "SELECT t1.text as etext, t2.text 
FROM ".$prefix."_language t1 LEFT JOIN ".$prefix."_language t2 ON t2.fk_id = t1.id AND lang = 'da'";
if($result1 = $mysqli->query($res1)){ 
    while($row1 = $result1->fetch_object()){
        $row1->text.'<br>';
    }
}

結果が返ってこない?

4

2 に答える 2

0
SELECT t1.text as etext, t2.text 
FROM language t1 LEFT JOIN language t2 ON t2.fk_id=t1.id AND lang = '$language'

またはこのようなもの。
主なアイデアは、英語部分を別の言語部分に LEFT JOIN することです。2つのテキストまたは英語のテキストのみを返します

于 2013-02-18T11:23:43.320 に答える
-1

UNION と Sub-Query を使用したソリューションは機能しますが、読み込み時間を考慮すると最適な方法ではない可能性があります。

"( select text from ".$prefix."_language where lang = '$langid') 
union
( select text from ".$prefix."_language where lang = 'en' and fk_id not in ( select fk_id from ".$prefix."_language where lang = '$langid' ))";
于 2013-02-18T13:29:13.230 に答える