I didn't use your fiddle because you describe the problem so well that the query is so simple.
Your need to build name of your table and column better than that. With a good looking schema, the query you describe is this one:
SELECT DISTINCT lang.id, lang.name
FROM exhibition
INNER JOIN form
ON exhibition.formId = form.id
INNER JOIN question
ON form.Id = question.formId
INNER JOIN translation
ON translation.formId = form.id
INNER JOIN lang
ON translation.langId = lang.id
WHERE exhibition.id = 4
Here is the query with the fiddle :
SELECT DISTINCT app_languages.id, app_languages.name
FROM app_exhibition
INNER JOIN app_forms
ON app_exhibition.form_id = app_forms.id
INNER JOIN app_vragen
ON app_forms.id = app_vragen.form_id
INNER JOIN app_vragen_translations
ON app_vragen_translations.vraag_id = app_vragen.id
INNER JOIN app_languages
ON app_vragen_translations.lang_id = app_languages.id
WHERE app_exhibition.id = 4
Results app_exhibition.id = 4
id name
4 German
More results if using the other exhibition app_exhibition.id = 5
id name
7 Dutch
2 English
Some hints :
- Use plain english and not your local langage. There is plenty reason for that, one of them is that it is easier to have answer on stackoverflow
- Don't use implicit joins (joins in the WHERE clause), but use JOIN clause instead. The query becomes more readable, and the difference between JOINING and FILTERING is obvious. JOIN is for joining, WHERE is for filtering. WHERE is NOT for joining.
Note : exhibition and question are referencing the field formId, so the join on the table form can be omitted if no further info are needed from this table:
SELECT DISTINCT app_languages.id, app_languages.name
FROM app_exhibition
INNER JOIN app_vragen
ON app_exhibition.form_id = app_vragen.form_id
INNER JOIN app_vragen_translations
ON app_vragen_translations.vraag_id = app_vragen.id
INNER JOIN app_languages
ON app_vragen_translations.lang_id = app_languages.id
WHERE app_exhibition.id = 4