場景:
我需要選擇20個用戶與他們的所有信息,還可以選擇與他們所教的語文老師的個人資料。我試圖做到這一點,但似乎MySQL只返回一個值的數組沒有嵌套的數組值,有沒有辦法做到這一點?MySQL的 - 從表中選擇所有從另一個表中選擇相關行
表:
+------------------------------------------+
| users |
+------------------------------------------+
| id | firstname | email |
+------------------------------------------+
| 18 | Tom | [email protected] |
+------------------------------------------+
| 30 | Jerry | [email protected] |
+------------------------------------------+
| 25 | Butch | [email protected] |
+------------------------------------------+
+------------------------------------+
| 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'
向我們展示您的代碼,請在尋求幫助之前親自嘗試一下。 – Adam 2014-08-27 22:40:21
MySQL不返回多維記錄。每個記錄都是一維的。大多數關係數據庫都是這樣做的。您可以使用'GROUP_CONCAT'將多個值收集到1列中,具體取決於您需要的語言數據。 – Rudie 2014-08-27 22:41:06
我已經做了,我迄今爲止的代碼非常長,因爲它從多個表計算,如果它大部分是代碼,它不會讓我發佈問題。乾杯! – CupOfJoe 2014-08-27 22:41:39