suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Rufen Sie verschachtelte verwandte Werte in MySQL ab

Ich versuche, verwandte Werte basierend auf mehreren Einträgen in der Datenbank abzurufen. Ich bin sehr neu in JOINMySQL, 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粉007288593P粉007288593258 Tage vor522

Antworte allen(2)Ich werde antworten

  • P粉186904731

    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。不是 languagelanguageId,但在两个表中使用相同的名称(例如使用 languageId)。 Greeting 和greetingId 列也是如此。这将使查询更加简单:

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

    Antwort
    0
  • P粉194541072

    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

    Antwort
    0
  • StornierenAntwort