Scenario
I want to obtain the registered languages the user has along with all the user details, my current problem is that values are getting duplicated when I GROUP_CONCAT
the target column. Can someone explain me why the values are being duplicated.
My tables
// users
+------+-------------+------------+----------------+--------------+
| id | firstname | lastname | email | created_at |
+------+-------------+------------+----------------+--------------+
| 10 | John | Doe | john@doe.com | 2014-10-21 |
+------+-------------+------------+----------------+--------------+
// teachers
+------+-----------+------------------+-------------------+
| id | user_id | years_teaching | months_teaching |
+------+-----------+------------------+-------------------+
| 35 | 10 | 3 | 6 |
+------+-----------+------------------+-------------------+
// teacher_languages
+------+--------------+---------------+----------+---------+
| id | teacher_id | language_id | status | views |
+------+--------------+---------------+----------+---------+
| 52 | 35 | 5 | 1 | 80 |
+------+--------------+---------------+----------+---------+
| 53 | 35 | 7 | 1 | 40 |
+------+--------------+---------------+----------+---------+
// translators
+------+-----------+------------------------+---------------------+
| id | user_id | certified_translator | accept_travelling |
+------+-----------+------------------------+---------------------+
| 23 | 10 | 0 | 1 |
+------+-----------+------------------------+---------------------+
// translator_languages
+------+-----------------+---------------+----------+---------+
| id | translator_id | language_id | status | views |
+------+-----------------+---------------+----------+---------+
| 52 | 23 | 5 | 1 | 27 |
+------+-----------------+---------------+----------+---------+
| 53 | 23 | 7 | 1 | 82 |
+------+-----------------+---------------+----------+---------+
// languages
+------+-----------------+------------+
| id | language_text | language |
+------+-----------------+------------+
| 5 | English | EN |
+------+-----------------+------------+
| 7 | French | FR |
+------+-----------------+------------+
Current query
This is the query that produces the duplicate values
SELECT
u.*,
// teacher languages
GROUP_CONCAT(l.language_text) AS teacher_languages,
GROUP_CONCAT(tl.status) AS teacher_languages_status,
GROUP_CONCAT(tl.views) AS teacher_language_views
// translator languages
GROUP_CONCAT(trl_txt.language_text) AS translator_languages,
GROUP_CONCAT(trl.status) AS translator_languages_status,
GROUP_CONCAT(trl.views) AS translator_language_views
FROM
users u
LEFT JOIN
teachers t ON t.user_id = u.id
LEFT JOIN
teacher_languages tl ON tl.teacher_id = t.id
LEFT JOIN
languages l ON l.id = tl.language_id
LEFT JOIN
translators tr ON tr.user_id = u.id
LEFT JOIN
translator_languages trl ON trl.teacher_id = t.id
LEFT JOIN
languages trl_txt ON trl_txt.id = trl.language_id
GROUP BY
u.id
ORDER BY
u.created_at
Results
[0] =>
[id] => 10
[firstname] => 'John'
[lastname] => 'Doe'
[email] => 'john@doe.com'
[created_at] => '2014-10-21'
[teacher_languages] => 'English, English, French, French'
[teacher_language_status] => '1,1,1,1'
[teacher_language_views] => '80,40,80,40'
[translator_languages] => 'English, French, English, French'
[translator_language_status] => '1,1,1,1'
[translator_language_views] => '27,82,27,82'