检索mysql中嵌套的相关值
P粉007288593
P粉007288593 2024-04-04 17:29:06
0
2
535

我正在尝试根据数据库中的多个条目检索相关值。在使用 JOINs 等方面,我对 MySQL 非常陌生,我试图避免不必要地涉及 PHP

当我说“检索嵌套相关值”时,请看以下示例:

"Person" table          "Language" table          "Greeting" table

| personId | language | | languageId | greeting | | greetingId | value     | 
|----------|----------| |------------|----------| |------------|-----------|
| 1        | en       | | en         | 3        | | 1          | konichiwa |
| 2        | jp       | | jp         | 1        | | 2          | bonjour   |
| 3        | fr       | | fr         | 2        | | 3          | hello     |

如果我想检索第一个人的问候语,流程将是:

1 -> en -> 3      -- ID Flow
en -> 3 -> hello  -- Value flow
Person 1: "hello" -- Final result

或者,如果我想检索第三个人的问候语,它会改为:

3 -> fr -> 2        -- ID flow
fr -> 2 -> bonjour  -- Value flow
Person 3: "bonjour" -- Final result

那么,我该如何在 MySQL 中执行此操作?如果这已经有了答案,我深表歉意;我似乎无法找到研究正确答案的措辞。

P粉007288593
P粉007288593

全部回复(2)
P粉186904731
SELECT greeting.value
FROM person
JOIN language ON person.language = language.languageId
JOIN greeting ON language.greeting = greeting.greetingId
WHERE person.personId = ?

建议 - 使相对列名称相等。 IE。不是 languagelanguageId,但在两个表中使用相同的名称(例如使用 languageId)。 Greeting 和greetingId 列也是如此。这将使查询更加简单:

SELECT greeting.value
FROM person
NATURAL JOIN language
NATURAL JOIN greeting
WHERE person.personId = ?
P粉194541072

JOIN 根据某些条件连接两个表的记录。例如您想要将表“Person”中的记录与表“Language”中的记录连接起来,以便列 language 中的值等于列 languageId 中的值可以通过给出以下 FROM 子句来做到这一点:

FROM Person INNER JOIN Language 
  ON Person.language = Language.languageId

这个 JOIN 的结果是一个看起来像这样的表

Person.personId 人物.语言 语言.语言Id 语言.greeting
1 一个 一个 3
2 日本 日本 1
3 fr fr 2
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板