php - MySQL - 从表中选择全部并从另一个表中选择相关行

标签 php mysql sql

场景:
我需要选择 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不过,根据您需要语言数据的方式,将多个值收集到一列中:

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...您需要一个额外的 JOIN(多个)到 teacher_languages,然后另一个 JOIN(单个) ) 到 languages,然后使用 GROUP_CONCAT 将多种语言记录收集到 1 个值中。

关于php - MySQL - 从表中选择全部并从另一个表中选择相关行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25538036/

相关文章:

mysql - SQL 返回 NULL 行和相应的下一行

php - 我使用更改事件,但是当我将值赋给类(class)上的选择选项时,专业不会附加数据。

php - 如何使用php从mysql访问图像到html表

总计的php sql查询语句

android - fragment 不显示 ListView 项目

c# - LINQ to Entities 无法识别方法 'Double Parse(System.String)' 无法转换为存储表达式 C# asp.net

sql - 子查询有子句错误,我错过了什么?

php - 如何查看mysql数据库中的重复记录

php - 在没有表单的情况下将内容发布到 URL?

php - 从表单运行数组