簡體   English   中英

MySQL-從表中選擇全部,然后從另一個表中選擇相關的行

[英]MySQL - Select all from table and select related rows from another table

場景:
我需要選擇20位用戶及其所有信息,還需要選擇其教師資料以及所教授的所有語言。 我正在嘗試執行此操作,但似乎mysql僅返回沒有嵌套值數組的值數組,有什么辦法嗎?

表格:

+------------------------------------------+
|                  users                   |
+------------------------------------------+
|  id  |  firstname  |        email        |
+------------------------------------------+
|  18  |     Tom     |   jerry@email.com   |
+------------------------------------------+
|  30  |    Jerry    |   tom@email.com     |
+------------------------------------------+
|  25  |    Butch    |   butch@email.com   |
+------------------------------------------+

+------------------------------------+
|               teachers             |
+------------------------------------+
|  id  |  user_id  |  trial_lessons  |
+------------------------------------+
|  10  |    18     |       yes       |
+------------------------------------+
|  26  |    30     |       no        |
+------------------------------------+
|  28  |    25     |       no        |
+------------------------------------+

+------------------------------------------+
|            teacher_languages             |
+------------------------------------------+
|  id  |  teacher_id  |  language_text_id  |
+------------------------------------------+
|  16  |      10      |         6          |
+------------------------------------------+
|  40  |      10      |         8          |
+------------------------------------------+
|  16  |      28      |         6          |
+------------------------------------------+
|  16  |      28      |        10          |
+------------------------------------------+
|  16  |      26      |         6          |
+------------------------------------------+

+-------------------+
|     languages     |
+-------------------+
|  id  |  language  |
+-------------------+
|   6  |   English  |
+-------------------+
|   8  |   French   |
+-------------------+
|  10  |   Spanish  |
+-------------------+

我的代碼這么遠

SELECT 
    users.*,        
    nationality.country AS country_of_nationality,
    residence.country AS country_of_residence,
FROM
    users
LEFT JOIN
    text_countries AS nationality
ON
    users.nationality = nationality.iso_code_2
AND
    nationality.language_id = ?
LEFT JOIN
    text_countries AS residence
ON
    users.residence_country = residence.iso_code_2
AND
    residence.language_id = ?
ORDER BY 
    users.created_at 
DESC LIMIT 
        20

預期成績

[0] => 
    [user_id]    => 18
    [firstname]  => 'Tom'
    [teacher_id] => 10
    [languages]  =>
                 [language] => 'English'
                 [language] => 'French'
[1] => 
    [user_id]    => 30
    [firstname]  => 'Jerry'
    [teacher_id] => 26
    [languages]  =>
                 [language] => 'English'
[2] => 
    [user_id]    => 25
    [firstname]  => 'Butch'
    [teacher_id] => 28
    [languages]  =>
                 [language] => 'English'
                 [language] => 'Spanish'

MySQL不返回多維記錄。 每個記錄都是一維的。 大多數關系數據庫都這樣做。

您可以使用GROUP_CONCAT將多個值收集到1列中,具體取決於您需要的語言數據:

SELECT stuff, GROUP_CONCAT(l.language) AS languages
FROM users u
JOIN teachers t ON ....
JOIN teacher_languages tl ON ....
JOIN languages l ON ....
GROUP BY u.id

我假設您知道(並擁有?) JOIN s ...您需要一個額外的JOIN(多個)到teacher_languages ,然后另一個JOIN(單個)到languages ,然后使用GROUP_CONCAT將多個語言記錄收集為1個值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM