2015-06-09 89 views
0

我不是寫最複雜的(對我來說)mysqli查詢。從兩個sql表創建一個PHP數組

我想用兩個不同的表中的數據創建一個數組。

表1:text_strings

id string 
1  hello 
2  good_morning 

表2:text_translations

id textid lang translation 
1  1   en  Hello 
2  1   es  Hola 
3  2   en  Good Morning 
4  2   es  Buenos Dias 

所以,我努力使基於語言翻譯的數組。如果我的語言設置爲西班牙語(ES),數組是這樣的:

['hello'=>'Hola','good_morning'=>'Buenos Dias'] 

因此,陣列的結構將是:

$lang['string'] = ['translation']; 

在書面英語,如果語言是「ES 「,選擇lang爲」es「的」text_translations「中的所有內容,並使數組鍵等於」text_strings「表中textid字符串值的值。

我假設與LEFT JOIN東西,但我真的不知道如何設置此查詢。

+0

這可能會給你一個提示,其中'JOIN'使用方法:http://www.sitepoint.com/understanding-sql -joins-mysql-database/ – alexandreferris

+0

'$ lang [$ id] ['translation'];'會是更好的練習 – Onimusha

回答

0

這很簡單JOIN。從數據庫獲取此查詢到數組。

SELECT t.translation, s.string 
FROM text_strings AS s 
JOIN text_translations AS t ON s.id = t.textid AND lang = 'es' 
0

聽起來像你的問題更多「如何加入兩張桌子」。我建議你在擔心如何在php中處理它們之前弄清楚。 W3學校有一個非常簡單和直接的SQL概要。關於連接的部分可以找到here

1

下面的查詢將讓你與對方,stringtranslation相關的兩列,並在PHP,你可以把它拿來和到位的值創建一個數組根據需要(代替鍵和翻譯串)。

我曾經使用過INNER JOIN原因,stringtranslation應該在那裏,以防萬一找不到它們中的任何一個。這將被排除。

SELECT TextString.`string`, TextTranslation.`translation` FROM text_strings TextString INNER JOIN text_translations TextTranslation 
ON TextString.id = TextTranslation.text_id 
WHERE TextTranslation.lang = 'en' 

及以上PHP,你可以不喜歡它:

$translations = array(); 
while ($strings = $query->fetch_array(MYSQLI_ASSOC)) { 
    $translations[$strings['string']] = $strings['translation']; 
} 
+0

我會像'while一樣($ strings = $ query-> fetch_array(MYSQLI_ASSOC)){'? – JROB

+0

是的,請參閱更新回答 –

+0

謝謝,但我完全按照您的說法使用它,但我得到「fetch_array是非對象」錯誤。 '$ query = $ db-> query(「SELECT string FROM text_strings TextString INNER JOIN text_translations TextTranslation ON TextString.id = TextTranslation.text_id WHERE TextTranslation.lang ='$ lang'」);' – JROB

相關問題