![](/img/trans.png)
[英]mysql: select from a table where key is equal to a value and also select all the rows related to that value directly or indirectly
[英]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.