从两个sql表创建一个PHP数组

时间:2015-06-09 17:33:42

标签: php mysqli

我不是最擅长编写复杂的(对我来说)mysqli查询。

我正在尝试使用来自两个不同表的数据创建一个数组。

表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

所以,我正在尝试根据语言制作一系列翻译。如果我的语言设置为西班牙语,则数组将类似于:

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

因此,数组的结构将是:

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

在书面英语中,如果语言为“es”,则从“text_translations”中选择all,其中lang为“es”,并使数组键等于“text_strings”表中textid字符串值的值。

我假设有LEFT JOIN的内容,但我真的不知道如何设置此查询。

3 个答案:

答案 0 :(得分: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'];
}

答案 1 :(得分:0)

听起来你的问题更多"如何加入两个表"。我建议你在担心如何在php中处理它们之前解决这个问题。 W3学校有一个非常简单直接的sql纲要。有关联接的部分可以找到here

答案 2 :(得分:0)

这很简单。将此查询从db获取到数组。

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