Heim > Fragen und Antworten > Hauptteil
Ich versuche, verwandte Werte basierend auf mehreren Einträgen in der Datenbank abzurufen. Ich bin sehr neu in JOIN
MySQL, was die Verwendung von s usw. angeht, und ich versuche, PHP unnötig zu vermeiden.
Wenn ich „verschachtelte verwandte Werte abrufen“ sage, sehen Sie sich dieses Beispiel an:
"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 |
Wenn ich die Begrüßung der ersten Person abrufen möchte, wäre der Vorgang:
1 -> en -> 3 -- ID Flow en -> 3 -> hello -- Value flow Person 1: "hello" -- Final result
Alternativ, wenn ich die Begrüßung einer dritten Person abrufen wollte, würde sie lauten:
3 -> fr -> 2 -- ID flow fr -> 2 -> bonjour -- Value flow Person 3: "bonjour" -- Final result
Also, wie mache ich das in MySQL? Ich entschuldige mich, wenn es hier bereits eine Antwort gibt; ich kann anscheinend nicht den Wortlaut finden, um die richtige Antwort zu recherchieren.
P粉1869047312024-04-05 11:26:19
SELECT greeting.value FROM person JOIN language ON person.language = language.languageId JOIN greeting ON language.greeting = greeting.greetingId WHERE person.personId = ?
建议 - 使相对列名称相等。 IE。不是 language
和 languageId
,但在两个表中使用相同的名称(例如使用 languageId
)。 Greeting 和greetingId 列也是如此。这将使查询更加简单:
SELECT greeting.value FROM person NATURAL JOIN language NATURAL JOIN greeting WHERE person.personId = ?
P粉1945410722024-04-05 00:49:17
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 |