gpt4 book ai didi

mysql - SQL : Help writing select query using JOIN

转载 作者:行者123 更新时间:2023-11-29 02:46:33 26 4
gpt4 key购买 nike

我有三个表:

语言

ID    LangName    LangAbbr
1 English en
2 Spanish es

字符串

ID    String
1 Hello
2 Goodbye

翻译

ID    LangID    StringID    Translation
1 1 1 Hello
2 2 1 Hola
3 1 2 Goodbye
4 2 2 Adios

截至目前,我已经从 languages 中获得了语言的 ID表,并运行查询以获取该语言的所有翻译:

SELECT t.Translation, s.String FROM Strings 
AS s JOIN Translations AS t ON s.ID = t.StringID
AND LangID = :LangID

这很好用。但是,我需要在其他地方更新我的一些代码,现在我将无法再访问 LangID。 ,而是只有 LangAbbr来自 Languages表(到现在为止还没有在此查询中使用)。

我的问题是,如何更新此查询以执行以下操作:

  1. 获取 ID来自 Languages表其 LangAbbr = X(我的变量)

  2. 使用该 ID,返回一个数组,其键等于每个 String 的名称在Strings表,其值等于 TranslationTranslations该字符串/语言 ID 的表。

最佳答案

您实际上只需要通过 Strings 添加另一个连接到 Languages 并且因为您不需要返回给定语言的未翻译字符串,所以没有什么复杂的。例如,要将所有西类牙语字符串作为 String,Translation 对返回,SQL 将是 ( http://sqlfiddle.com/#!9/30273/4 ):

SELECT 
String,
Translation
FROM
strings s
INNER JOIN translations t ON s.ID = t.StringID
INNER JOIN languages l ON t.LangID = l.ID
-- use PDO param :langAbbr
WHERE LangAbbr = 'es'

根据您的评论,我假设您使用的是 PHP/PDO。获取循环可以构造为将数组键设置为:

// Assuming a successful prepare()/execute() of the above query
// into $stmt
$stmt = $conn->prepare($sql_from_above);
$stmt->execute(array(':langAbbr' => 'es'));

$translations = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// Index the $translations array by String during the fetch
$translations[$row['String']] = $row['Translation'];
}

关于mysql - SQL : Help writing select query using JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41403572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com