我不是最擅长编写复杂的(对我来说)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
的内容,但我真的不知道如何设置此查询。
答案 0 :(得分:1)
下面的查询将为您提供两列相互关联的列string
和translation
,并通过PHP可以获取它,并根据需要创建一个数组(字符串代替键和翻译)代替价值)。
我曾使用INNER JOIN
原因,string
和translation
都应该在那里,以防万一找不到其中任何一个。那将被排除在外。
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'