2015-06-09 34 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

相关问题