繁体   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